簡體   English   中英

在MYSQL中允許對索引列使用Null值還是對索引列使用NOT 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被廣泛認為是“未知值”或“不適用”。 按照TRUEFALSE常數的定義 ,選擇1或0。

另外,即使MySQL將其實現為TINYINT(1)的別名,我還是建議使用ANSI標准的BOOLEAN類型


* 好的,理論上並不完全正確

暫無
暫無

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

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