MySQL語句優化

2021-10-04 05:37:41 字數 993 閱讀 7302

1.主要想辦法如何使用到索引:

2.orderby排序,應該盡量走索引(左字首原則已經自動排好序);而不是filesort;如果是filesort,應該盡量調高sorted_buffer的記憶體大小,讓其盡量在記憶體中排序。filesort又分為全字段和row_id排序。

3.join優化

t1是小表,t2是大表

(1)join,小表驅動大表(1.走索引,起決定因素的是驅動錶行數n, 2.被驅動表不走索引join_buffer_size可以放更多,),被驅動錶走索引;

(2)使用bka演算法,為了回表的時候順序讀

(3)bnlj會導致bufferpool裡面的lru資料中冷資料區域被這個冷表佔據,會導致其他命中率下降。(引申乙個問題就是,新開發乙個功能,使用了連表語句,結果導致了其他訪問資料的能力下降)

(4)建立乙個臨時表,把t2中滿足的資料放在臨時表(臨時表是為了減少全表掃瞄的次數)

(5)到業務端進行join

create temporary table temp_t(id int primary key, a int, b int, index(b))engine=innodb;

insert into temp_t select * from t2 where b>=1 and b<=2000;

select * from t1 join temp_t on (t1.b=temp_t.b);

3.group by 優化

(1)應該讓分組的那個字段盡量走索引,這樣在掃瞄的過程中就自動統計好了,也不需要排序,用到臨時表了

(2)不適合優化,且資料量很大的情況下

在 group by 語句中加入 sql_big_result 這個提示(hint),就可以告訴優化器:這個語句涉及的資料量很大,請直接用磁碟臨時表。

select sql_big_result id%100 as m, count(*) as c from t1 group by m;

4.=,is null,函式,覆蓋索引,%開頭,不滿足左字首

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 ...