MySql IN 和 OR 效率問題

2021-09-16 13:40:34 字數 533 閱讀 8569

假設檢索的列為n,in 的時間複雜度為 o(logn),而 or 的時間複雜度為 o(n)

在資料量少於100條時的情況下差別不大

當要檢索的列為主鍵索引時,in 的執行速度和 or 差別不大

當要檢索的列為普通索引時,in 的執行速度和 or 差別不大

當要檢索的列沒有索引時,in的執行速度要遠大於 or

例如:1000條左右的資料,沒有索引的情況下執行時間 in 是在秒級別,而or是分鐘級別的。

對於下面這條 sql 語句:

select * from tbname where key in (a1, a2, ...... , an); 

select * from tbname where key = a1 or key = a2 or ...... or key = an;

用不上索引的情況下,遍歷全表的 key,去匹配 a1, a2, ......, an

因此,in 的效率要高於 or,引數集合範圍越大,in 的效能不會太大下降,而 or 會下降非常厲害。

mysql in 和exists查詢效率總結

看到網上好多的文章,關於in 和exists,我自己專門去校驗了一下,自己通過儲存過程,迴圈增加了10萬條資料,建立表 drop table if exists tb test create table tb test id int primary key auto increment not nu...

MySql in子句 效率低下優化

背景 更新一張表中的某些記錄值,更新條件來自另一張含有200多萬記錄的表,效率極其低下,耗時高達幾分鐘。update clear res set candelete 0 where resid in select distinct resourceid from att attentionresul...

Mysql in 排序問題

select from table where id in 3,6,9,1,2,5,8,7 這樣的情況取出來後,其實,id還是按1,2,3,4,5,6,7,8,9,排序的,但如果我們真要按in裡面的順序排序怎麼辦?sql能不能完成?是否需要取回來後再foreach一下?其實可以這樣 select f...