我們已經建立了一個索引,特別是針對一個查詢,但我發現該查詢需要 5 到 6 秒的時間來執行。我嘗試使用以下查詢來取得未使用的索引,我注意到該索引列在未使用的索引清單中。請建議如何為以下查詢獲得更好的效能。
查詢where子句:WHERE parsedjobdescription IS NOT NULL AND is_updated != 0
索引:KEYidx_jobs_feed_parsedjobdescription_is_updated(
parsedjobdescription(700),
is_updated)
未使用的索引:SELECT * FROM sys.schema_unused_indexes;
欄位:parsedjobdescription varchar(50000) DEFAULT NULL is_updated tinyint(1) DEFAULT '0'
#解釋查詢:
可能的鍵:idx_jobs_feed_parsedjobdescription_is_updated,idx_is_updated
鍵:idx_jobs_feed_parsedjobdescription_is_updated
金鑰長度:703
行數:1
過濾:50.0
P粉2327937652024-04-01 09:01:20
禁止使用索引的兩列的三件事:
IS NOT NULL - 一旦達到範圍,其餘欄位將不會被使用。
is_updated != 0 -- 這也是一個「範圍」。
索引前綴有問題。
INDEX(parsedjobdescription(700), ... -- won't get past that prefix to use anything after it.
如果測試是 is_updated = 1
,您可以翻轉索引(或新增另一個索引):
INDEX(is_updated, parsedjobdescription(100))