![](/img/trans.png)
[英]Mysql insert query performance on indexed column if the column value is null
[英]Allow Null values for indexed column or NOT NULL for indexed column in MYSQL? What is good?
我正在使用MYSQL作為數據庫。 檢查是這個表的定義
CREATE TABLE `test`.`header`
(
`header_id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`title` VARCHAR(500) NOT NULL,
`body` VARCHAR(5000) NOT NULL,
`created_by_id_ref` BIGINT UNSIGNED NOT NULL,
`created_date` DATETIME NOT NULL,
`updated_date` DATETIME NULL DEFAULT NULL,
`is_void` TINYINT(1) NULL DEFAULT NULL,
PRIMARY KEY (header_id`) ) ENGINE=INNODB CHARSET=latin1 COLLATE=latin1_swedish_ci;
在我的界面中,用戶可以通過簡單地從網格視圖中選擇記錄來刪除任何記錄。 因此,在那種情況下,我只是將“ is_void”狀態更新為true。
我用這種語法聲明了該列。 如上所示。 再來一次
`is_void` TINYINT(1) NULL DEFAULT NULL,
因此,如果我向該列添加索引,此列聲明是否正確? 在這種情況下,記錄默認值為空值。 對於無效的記錄,它將為“ 1”。 因此,如果我要過濾掉所有記錄中的無效記錄,就必須使用
Select ........ where is_void=1;
如果我想過濾未作廢的記錄,可以使用
Select ........ where is_void IS NULL;
那么這個NULL聲明會影響我的選擇查詢性能嗎? (請記住,我已將此列編入索引)
還是我將我的專欄聲明為
`is_void` TINYINT(1) NOT NULL,
然后為無效記錄插入“ 0”。 然后,如果我想過濾未作廢的記錄,我可以使用
Select ........ where is_void=0;
那么什么是最好的? 其中is_void = 0; 或is_void IS NULL;
非常感謝你。
在性能方面,這兩種方法是等效的* 。
就邏輯而言, NULL
被廣泛認為是“未知值”或“不適用”。 按照TRUE
和FALSE
常數的定義 ,選擇1或0。
另外,即使MySQL將其實現為TINYINT(1)
的別名,我還是建議使用ANSI標准的BOOLEAN
類型 。
* 好的,理論上並不完全正確 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.