SQL優化經歷記錄

2022-10-11 14:00:10 字數 841 閱讀 7089

1、關聯表的時候,欄位的順序最好按照表的索引的順序去寫,特別是關聯的表比較大的時候,效果特別明顯

2、如果乙個表比較大,且在儲存中的使用頻度很高,可以考慮建立臨時表,且建立索引。單錶的索參數量應該盡量控制在5個以內,並且單個索引中的字段數不超過5個。2、如果針對某個欄位的or是走索引的,針對多個欄位的or是不走索引的。可以用union代替or。

3、in一般會走索引,但是當in的取值範圍較大時會導致索引失效,走全表掃瞄;not in在任何情況下都不會使用索引。一般來說, 盡量避免使用in 和not in。

4、exists、not exists一般會走索引,但某些情形下效率很差,所以盡量不要用

5、盡量避免進行null值的判斷,會導致資料庫引擎放棄索引進行全表掃瞄,可以給字段新增預設值0,對0值進行判斷。

6、盡量避免在where條件中等號的左側進行表示式、函式操作,會導致資料庫引擎放棄索引進行全表掃瞄,可以將表示式、函式操作移動到等號右側(a / 10 = 9 不走索引,a = 10 * 9走索引 )

7、當資料量大時,避免使用where 1=1的條件。用**拼裝sql時進行判斷,沒 where 條件就去掉 where,有where條件就加。

8、使用索引列作為條件進行查詢時,需要避免使用<>或者!=等判斷條件。

9、隱式型別轉換不使用索引

10、 order by 條件要與where中條件一致,否則order by不會利用索引進行排序。當order by 中的字段出現在where條件中時,才會利用索引而不再二次排序,更準確的說,order by 中的字段在執行計畫中利用了索引時,不用排序操作。這個結論不僅對order by有效,對其他需要排序的操作也有效。比如group by 、union 、distinct等。

一次SQL優化經歷

最近遇到乙個sql執行很慢。這個sql比較長,但基本的形態比較簡單 select t1.t2.c1 from t1 left join t2 on t1.c1 t2.c1 left join t3 on t1.c2 t3.c1 left join t3 on t1.c3 t3.c1 執行explai...

SQL優化點滴記錄

1 在where和order by 涉及的列上加索引 2 引擎會放棄使用索引的情況 1 避免where子句字段進行null值判斷 2 避免where子句中使用 或 操作符 3 避免where子句中使用or。3 慎用in 和not in,in和not in也會進行全表掃瞄 4 like 子句盡量少用,...

記錄一次索引優化經歷

表結構如下 主要用到fis backup fid和fstatus幾個欄位做查詢。索引如下 整張表,前半部分資料fis backup都是1,後半部分資料fis backup都是0,共2000w多條資料 查詢語句如下 select from t mp comment c where c.fid 1504...