SELECT * FROM sessions WHERE UNIX_TIMESTAMP(end_time) - UNIX_TIMESTAMP(start_time) > 3600;
??
? 索引失效
存儲持續時間:ADD COLUMN duration INT AS (UNIX_TIMESTAMP(end_time) - UNIX_TIMESTAMP(start_time)) STORED
🧠 四、條件判斷函數(含性能分析)
函數
示例
性能影響
索引影響
優化建議
IF()
SELECT id, IF(status=1, '啟用', '禁用') AS status_text FROM devices;
?
? 無影響
可安全使用
CASE
SELECT CASE WHEN score>90 THEN 'A' ... END FROM exams;
?
? 無影響
復雜邏輯建議應用層處理
COALESCE()
SELECT COALESCE(email, phone) AS contact FROM users;
??
? 無影響
避免在WHERE中使用:WHERE COALESCE(email,'') != '' → WHERE email IS NOT NULL
IFNULL()
SELECT IFNULL(discount, 0) FROM orders;
?
? 無影響
可安全使用
📊 五、聚合函數(含性能分析)
函數
示例
性能影響
索引影響
優化建議
COUNT()
SELECT COUNT(DISTINCT user_id) FROM big_table;
????
? 全表掃描
用近似計數:SELECT COUNT(*) FROM (SELECT user_id FROM big_table GROUP BY user_id) tmp;
AVG()
SELECT AVG(salary) FROM employees WHERE dept=3;
??
? 索引有效
確保dept有索引,大表分片統計
GROUP_CONCAT()
SELECT dept, GROUP_CONCAT(name) FROM emp GROUP BY dept;
???
? 內存消耗
設置group_concat_max_len限制長度
SUM()
SELECT SUM(amount) FROM sales WHERE date>'2025-01-01';
??
? 索引有效
添加覆蓋索引:INDEX(date, amount)
🔍 六、高級函數(含性能分析)
函數
示例
性能影響
索引影響
優化建議
ROW_NUMBER()
SELECT id, ROW_NUMBER() OVER(ORDER BY score DESC) FROM students;
???
? 無索引
MySQL 8.0+使用,避免大表全排序
CAST()
SELECT * FROM products WHERE CAST(price AS UNSIGNED) > 1000;
????
? 索引失效
存儲時使用正確類型,避免轉換
UUID()
INSERT INTO orders(id, ...) VALUES(UUID(), ...);
??
? 索引碎片
改用有序UUID:UUID_TO_BIN(UUID(), 1)
FULLTEXT()
SELECT * FROM articles WHERE MATCH(content) AGAINST('MySQL');
??
? 專用索引
使用全文索引并優化配置
💎 函數使用黃金法則
1. 索引失效高危場景
-- 錯誤:函數包裹索引字段SELECT*FROM users WHERE DATE_FORMAT(create_time,'%Y%m')='202508';-- 正確:保持索引列純凈SELECT*FROM users WHERE create_time BETWEEN'2025-08-01'AND'2025-08-31';
2. 預計算策略
-- 實時計算(避免)SELECT*, price*0.9AS discount_price FROM products;-- 預存儲方案(推薦)ALTERTABLE products ADD discount_price DECIMAL(10,2)AS(ROUND(price*0.9,2)) STORED;CREATEINDEX idx_discount ON products(discount_price);
3. 函數執行成本分級
級別
特征
代表函數
?
輕量級
IF(), COALESCE()
??
中等
DATE_ADD(), CONCAT()
???
較重
RAND(), GROUP_CONCAT()
????
高危
SUBSTRING(字段), CAST(字段)
?????
災難
ORDER BY RAND()
4. 優化檢測工具
-- 檢查索引使用EXPLAINSELECT*FROM users WHERE LOWER(username)='admin';-- 性能分析SET profiling =1;SELECT...;SHOW PROFILE FOR QUERY 1;
前言:好多東西不記錄就會忘記 git ssh配置
當我們的沒有配置git ssh的時候,使用ssh下載的時候會顯示報錯“make sure you have the correct access rights and respository exits"
如何解決,我們先在命令行檢查檢查一下用戶名和郵箱是…