MySQL優化案例
1.建立索引并傳輸正确的資料類型
原SQL語句(沒有任何修飾):SELECT uid FROM user WHERE mo=13725525225 LIMIT 0,1;
在WHERE查詢條件後mo字段添加索引-->給mo字段添加索引
檢視資料庫字段資料結構,發現mo字段定義的是char資料類型。而傳入的類型為int型,發生了隐式轉換。
通過explain檢視sql的執行計劃
常見的隐式轉換,包括字段資料類型以及字元集定義不當導緻資料類型的隐式轉換。
避免在索引函數中加入函數,會導緻索引失敗。
2.分頁查詢SQL優化案例
原SQL語句:開發中常見的開發sql語句
SELECT * FROM uyer
WHERE sellerId = 765922982
AND gmt_modified >= '1970-01-01 08:00:00'
AND gmt_modified <= '2013-06-05 17:11:31'
LIMIT 255000,5000;
MySQL在進行上述翻頁寫法,在越往後的過程中速度越慢。原因MySQL會讀取表中的前M+N資料,M越大,性能越差。
優化後SQL語句:
SELECT t1.* FROM uyer t1,
(select id from uyer sellerid=100 limit 100000,5000) t2
WHERE t1.id=t2.id;
在t表中sellerid字段添加索引,id為表的主鍵。
2.子查詢SQL優化案例
原SQL語句:
SELECT first_name
FROM employees
WHERE emp_no IN (SELECT emp_no FROM salariy_2000 WHERE salary = 5000);
MySQL處理邏輯:周遊employees的每一條記錄,代入到子查詢中去查詢。
改寫子查詢:
SELECT first_name
FROM employees emp,(SELECT emp_no FROM salariy_2000 WHERE salary = 5000) sal
WHERE emp.emp_no = sal.emp_no;