【发布时间】:2014-10-02 07:23:33
【问题描述】:
我使用 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 为 NULL;
非常感谢。
【问题讨论】:
-
查看执行计划就知道了。
-
我会使用
1和0而不是1和null以保持一致性、约定和更容易的开发。性能方面,我仍然倾向于1和0。我也不喜欢null。 :) -
Andy 你认为 1 和 0 以及 1 和 NULL 方法在性能方面是否相等?还是不同?
标签: mysql