天天看點

MySQL優化案例

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;           

分頁優化:采用高效的limit寫法,來避免分頁查詢給資料庫帶來的影響。

子查詢:修改子查詢保證資料庫不會周遊掃描每一個記錄

查詢需要的字段:不要使用select * 查詢所有字段,隻查詢自己需要的資料字段。