簡體   English   中英

你能創建一個索引來確定mysql中的文本列是否為null?

[英]Can you create an index to determine if a text column is null in mysql?

我有一個非常大(> 1億行)的表和我需要編寫的查詢需要檢查TEXT類型的列是否為空。 我不關心實際文本,只有當列值為null時才關注。

我正在嘗試編寫索引以使該查詢有效,並且我希望僅通過查看索引來滿足查詢,例如,使得該查詢的解釋輸出顯示Using index而不是Using index condition

具體來說,我正在處理的表格有這樣的結構:

CREATE TABLE foo (
    id INT NOT NULL AUTO_INCREMENT,
    overridden TEXT,
    rowState VARCHAR(32) NOT NULL,
    active TINYINT NOT NULL DEFAULT 0,
    PRIMARY KEY (id),
) ENGINE=InnoDB

我想要的查詢是這樣的:

SELECT 
    IF(overridden IS NULL, "overridden", rowState) AS state, 
    COUNT(*)
FROM foo 
WHERE active=1
GROUP BY state

overridden列是對列重寫的原因的描述,但正如我上面提到的,我不關心它的內容,我只想將它用作布爾標志。

我已嘗試在(active, rowState, overridden(1))上創建索引(active, rowState, overridden(1))但解釋輸出仍顯示Using index condition

我能做些什么更好的事情嗎?

我懷疑這對於“前綴”索引來說是一個很好的應用程序。 (大多數嘗試使用這種都是慘敗。)

我認為最佳訂單是:

INDEX(active,         -- handle the entire WHERE first
      overridden(1),  -- IS NULL possibly works well
      rowState)       -- to make index "covering"

Using index condition意味着在引擎中處理行的選擇,而不是“處理程序”。

EXPLAIN FORMAT=JSON SELECT ...可以提供有關正在發生的事情的更多信息。 那么“優化器跟蹤”可能也是如此。

要么...

如果MySQL版本足夠新,則創建一個“生成列”,該列保持計算的overridden IS NULL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM