繁体   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