我有一張員工表(約450萬),其中有一列叫做job_title
和domain
。如何改進我的選擇查詢以使其更快?
我希望能夠創建並運行動態查詢,以根據職位名稱選擇特定的員工,並且其域也位於提供的域數組內。
它是如何工作的,是在前端用戶結束了域的大陣列(任何地方從200 - 10000),他們然後輸入兩件事情:他們希望
- 哪個職稱包括
- 他們想要的職稱排除
因此,我們再建立一個最終看起來像這樣的查詢:
SELECT employee_id
FROM employee
WHERE (
domain LIKE '%shetlandfoods.co.uk'
OR domain LIKE '%example1.co.uk'
OR domain LIKE '%example2.co.uk'
-- About 50 additional domains in this list
OR domain LIKE '%example50.co.uk'
)
AND (job_title LIKE '%Manager%' OR job_title LIKE '%Director%')
AND (job_title NOT LIKE '%Assistant%')
(注意域的列表非常長,並且可以包括數以千計的域名(的!))現在
,這樣的查詢需要約230秒,與大約180只有域!想象一下使用數千個;它會一直持續下去。
我想知道是否有任何方法可以優化/更改此查詢以使其運行速度更快?還是有什麼我可以做的數據庫?
'大部分是剛域,所以只是跳到結束'所有那些無索引的LIKE過濾器可能是問題所在。 –
「域」數據的來源是什麼?您能向我們展示幾個樣本嗎?我的想法是,也許你可以以某種方式預處理這些數據,以使查詢更容易。 –
專業提示:SQL可以包含換行符;-) –