find in set不利用索引

2021-10-18 01:23:22 字數 912 閱讀 5344

不要在列上使用函式,這將導致索引失效而進行全表掃瞄。

不要在列上進行運算,這也將導致索引失效而進行全表掃瞄。

當查詢條件左右兩側型別不匹配的時候會發生隱式轉換,隱式轉換帶來的影響就是可能導致索引失效而進行全表掃瞄。

select * from t where inta = "5"   // 型別不匹配,隱式轉換
設計多列復合索引時一定要注意,所有列必須不能為null,因為含有null的列是不會被加入索引的,直接無效

這也是不要允許null的乙個因素

innodb對or的查詢條件會執行多次單獨的查詢然後合併結果,時間複雜度為o(n),而對於in操作,innodb使用的是基於樹的二分查詢,時間複雜度為o(log n),顯然in更快

如果要查詢的資料都在復合索引列中,那麼就可以使用覆蓋索引,直接查詢到結果返回,省去「回表」

但要注意別把索引搞得太多或者太長,維護索引會降低效能

對於使用最左字首匹配索引,一定要注意必須從最左開始匹配才能利用上索引

對於使用最左字首匹配索引,可以使用前n個匹配字段,也可以使用前m個匹配字元

一旦使用字首匹配,那麼將不能使用覆蓋索引,也不能利用索引來排序或者group

復合索引第一列不需要再次建立單列索引

order by和group by後面接的列與復合索引順序一致時可以利用復合索引避免排序和臨時表

查詢中的某個列有範圍查詢,則其右邊所有列都無法使用索引優化查詢。

這個看起來很搞笑,但真的很有用

5.6 的mysql加入了icp、mrr、bka

5.6 也優化了子查詢,可以自動生成更快的查詢,減少人為各種優化

5.7 整體效能改進,同時改進in、union、臨時表,目前應該是最主流的版本

8.0+ 最新版本加入了skip scan access和hash join

springboot解析yml(不利用註解實現)

這幾天在寫乙個只有靜態變數和靜態方法的的工具類,但是這個工具類又需要獲取yml中的配置資訊。然後spring的bean的例項化順序是靜態 塊 建構函式 setter initializingbean中的afterpropertiesset 等。而且spring的注入方案是從物件入手進行注入的,所以無...

演算法 不利用額外空間判斷回文數

題目 determine whether an integer is a palindrome.do this without extra space.1.輸入檢測 如果輸入的integer是負數,返回false 2.額外空間 的大坑 用string來存放integer,使用了額外空間 3.溢位 的...

mysql sql利用索引

select id,title from user limit 1000,10 0.02秒 select id,title from user limit 88888,10 8 9秒 select id,title from user order by id limit 88888,10 0.04秒...