據庫優化

數據庫優化

1,使用 explain,查看SQL的執行計劃
杜絕出現all查詢
2,SQL中in包含的值不應該過多
能用between 儘量不用 in
3,查詢務必要指明字段,避免不必要的資源浪費
4,查詢只需要一條的 使用 limit 1
5,排序字段必須加索引。
6,如果限制條件中,其他字段沒有索引,儘量避免使用 or查詢
很多時候,
7,使用 union all代替 union
一個是過濾前排序,一個是過濾後排序
8,不適用 order by rand();
替換
select id form dynamic order by rand() limit 1000
優化後
select id from dynamic t1 join (select rand() *(select max(id) from dynamic) as nid) t2 on t2.id<t1.id limit 1000;
9,使用合理的分頁方式效率會快一點
比如大於100頁後,使用最小的ID從1開始。
10,分段查詢
11,避免在 where 子句中對字段進行 null值判斷,對null值判斷,會導致引擎放棄使用索引而採用全表掃描
12,不建議使用 %前綴模糊查詢,但可以使用 name%
創建全文索引的sql語法是:
ALTER TABLE dynamic_201606 ADD FULLTEXT INDEX idx_user_name (user_name);
十六、遵守最左前綴法則,對於聯合索引來說,要遵守最左前綴法則
舉列來說索引含有字段id,name,school,可以直接用id字段,也可以id,name這樣的順序,但是name;school都無法使用這個索引。所以在創建聯合索引的時候一定要注意索引字段順序,常用的查詢字段放在最前面
十七、必要時可以使用force index來強制查詢走某個索引
有的時候MySQL優化器採取它認爲合適的索引來檢索sql語句,但是可能它所採用的索引並不是我們想要的。這時就可以採用force index來強制優化器使用我們制定的索引。
十八、注意範圍查詢語句,between and 後面的字段索引會失效
對於聯合索引來說,如果存在範圍查詢,比如between,>,<等條件時,會造成後面的索引字段失效。
十九、關於JOIN優化
LEFT JOIN A表爲驅動表
INNER JOIN MySQL會自動找出那個數據少的表作用驅動表
RIGHT JOIN B表爲驅動表
注意:MySQL中沒有full join,可以用以下方式來解決
select * from A left join B on B.name = A.name where B.name is null union all select * from B;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章