**mysql in 和 or 效率問題
假設檢索的列為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
or,就是從 a1 匹配,匹配失敗,去匹配 a2,直到匹配成功或者乙個都匹配不上,時間複雜度是 o(n)
in,先將 a1, a2, …, an 變成二叉搜尋樹,用過二叉樹查詢,時間複雜度為o(logn)
因此,in 的效率要高於 or,引數集合範圍越大,in 的效能不會太大下降,而 or 會下降非常厲害。
mysql中or和in的效率問題
分三中情況進行測試,分別是 第一種情況 in和or所在列為主鍵的情形。第二種情況 in和or所在列建立有索引的情形。第二種情況 in和or所在列沒有索引的情形。每種情況又採用不同的in和or的數量進行測試。由於測試語句的資料量有4種情況,我這裡就稱為a組 b組 c組 d組,其中a組為3個值,b組為1...
Linq中Count 和Any 引發的效率問題
1 count和any 今天看了0 來判斷集合非空 href target blank 鶴沖天的文章 linq 切勿使用 count 0 來判斷集合非空 有所收穫,寫下文章總結一下 先看如下 1 static void main string args 212 public static ienum...
你擔心handlerThread的效率問題嗎?
handlerthread handler looper messagequeue相互關聯對應 queue是通過msg.next指向下乙個msg來實現,mmessages代表當前的message,每取出乙個msg,移動一次mmessages,一直到最後乙個msg handlerthread是乙個執行...