我做了兩個表,A和B。各有4W條資料,(兩個表關聯,一一對應的)
A表主要欄位:id(主鍵),show_date(時間欄位,字串,建立索引)
B表主要欄位:id(主鍵),a_id(與A表id關聯),show_date(時間欄位,字串,建立索引,與A表資料相同)。
第一個實驗:
SELECT COUNT (A.id)
FROM A,B
WHERE
A..show_date LIKE '2020%'
AND B.a_id = A.id;
查詢時間1000ms。
第二個實驗:
SELECT COUNT (A.id)
FROM A,B
WHERE
B..show_date LIKE '2020%'
AND B.a_id = A.id;
查詢時間200ms。
第三個實驗:
把A標的id主鍵約束去掉
SELECT COUNT (A.id)
FROM A,B
WHERE
A..show_date LIKE '2020%'
AND B.a_id = A.id;
查詢時間1000ms。
不懂是什么原因,有沒有大神能給解惑 orz...
uj5u.com熱心網友回復:
第一個實驗查詢時間寫錯了,應該是10000ms。兩個表用主鍵關聯,查詢比不用主鍵關聯慢10倍,不知道什么原因。
uj5u.com熱心網友回復:
看一下執行計劃和告知一下各個sql的值uj5u.com熱心網友回復:
你第三次查詢應該直接重用了第一次的查詢結果,因為SQL代碼是完全一致的,而且估計沒有物理讀。不是真正的對照實驗說明不了問題uj5u.com熱心網友回復:
這幾個查詢里,無論是哪個表的id欄位,是否主鍵對整個查詢沒有任何影響。COUNT里的欄位,和LIKE '2020%'用到的欄位,如果來源自一個表,效率要比來自不同表效率高。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/6874.html
標籤:開發
上一篇:Oracle 表磁區
下一篇:怎么處理from 變數表
