1、使用limit
當不需要取出全部資料時,在查詢後面加上limit限制。
2、select *
每次看到select * 的時候都需要用懷疑的眼光審視,是不是真的需要返回全部的列。
3、重複查詢相同的資料
4、列表in()的比較
相對於or,in()的處理速度更快。
5、分解關聯查詢
對於一些複雜的關聯查詢可以拆分為多個簡單查詢。這樣可以讓快取的效率更高;執行單個查詢可以減少鎖的競爭;減少冗餘記錄的查詢;查詢本身效率也可能會有所提公升。
6、關聯子查詢
慎用關聯子查詢,特別是where條件中包含in()的子查詢。
7、優化union查詢
(select id, name from a order by id)
union all
(select id, name from b order by id)
order by id limit 20;
上面這個語句是先查詢所有滿足條件的資料,存放臨時表中,再從臨時表中取出20條資料。
這個語句可以優化成:
(select id, name from a order by id limit 20)
union all
(select id, name from b order by id limit 20)
order by id limit 20;
優化後的語句是分別查詢20條資料存放臨時表中,總共40條資料,再從臨時表中取出20條資料。
8、min()和max()優化
對於min()和max()查詢,mysql的優化做的並不好。使用時往往會造成全表掃瞄。如:
select max(id) from a where name = '***';
可以使用limit來優化查詢:
select id from a where name = '***' order by id desc limit 1;
9、使用索引查詢
這個可以參考我的另一篇部落格:
mysql 語句優化例項 MySQL 語句優化例項
優化 limit 分頁 執行耗時 1.379s select from vio basic domain info limit 1000000,10 處理分頁慢查詢的方式一般有以下幾種 思路一 構造覆蓋索引 思路二 優化 offset 無法用上覆蓋索引,那麼重點是想辦法快速過濾掉前 100w 條資料...
mysql語句優化原則 MySQL語句優化的原則
1 使用索引來更快地遍歷表。預設情況下建立的索引是非群集索引,但有時它並不是最佳的。在非群集索引下,資料在物理上隨機存放在資料頁上。合理的索引設計要建立在對各種查詢的分析和 上。一般來說 a.有大量重複值 且經常有範圍查詢 和order by group by發生的列,可考慮建立群集索引 b.經常同...
mysql語句優化原則 mysql語句優化原則
有時候發現資料量大的時候查詢起來效率就比較慢了,學習一下mysql語句優化的原則,自己在正常寫sql的時候還沒注意到這些,先記錄下來,慢慢一點一點的學,加油!這幾篇部落格寫的都可以 使用索引的原則 1.最左字首匹配原則。mysql會一直向右匹配直到遇到範圍查詢 不會用到b的索引 where a 1 ...