[英]Can we create an index on a column containing NULL values in MySQL 5.7?
[英]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.