mySQL数据库哪个更快?布尔值,或使用零和一来表示布尔值?我的前端只有一个是/否单选按钮。
答案 0 :(得分:48)
启用“使用布尔”选项的某些“前端”会将所有TINYINT(1)列视为布尔值,反之亦然。
这允许您在应用程序中使用TRUE和FALSE而不是1和0.
这根本不会影响数据库,因为它是在应用程序中实现的。
MySQL中没有真正的BOOLEAN
类型。 BOOLEAN只是TINYINT(1)的同义词,TRUE和FALSE是1和0的同义词。
如果在编译器中完成转换,则应用程序的性能不会有任何差异。否则,差异仍然不明显。
您应该使用哪种方法可以更有效地编码,但不使用该功能可能会减少对特定“前端”供应商的依赖。
答案 1 :(得分:21)
在mySQL中 - " TRUE"和"错误"是TINYINT(1)的同义词。
因此它的基本相同,但mySQL正在转换为0/1 - 所以如果你更容易使用TINYINT
P.S。性能可能是如此微不足道(如果有的话),如果您需要在StackOverflow上询问,那么它不会影响您的数据库:)
答案 2 :(得分:6)
Bit
不符合您的喜好, tinyint
也是一种选择。一些链接:
毫不奇怪,有关数字类型的更多信息可用in the manual。
另一个链接:http://blog.mclaughlinsoftware.com/2010/02/26/mysql-boolean-data-type/
以上文章的评论部分引用:
- TINYINT(1)不是bit(1)的同义词。
- TINYINT(1)可以存储-9到9。
- TINYINT(1)UNSIGNED:0-9
- BIT(1):0,1。(比特,字面意思)。
编辑:此编辑(和答案)仅与原始问题远程相关...
Justin Rovang和作者maclochlainn的其他引用(链接文章的评论部分)。
对不起,我觉得自己已经成为了副主义的受害者: TINYINT(1): - 128- + 127 TINYINT(1)未签名:0-255 (Justin Rovang,8月25日,下午4:32)
确实如此,但该帖子是关于PHPMyAdmin列为布尔值的内容,并且它仅在256种可能性的整个范围内使用0或1。 (maclochlainn 8月25日11点35分)
答案 3 :(得分:2)
如果您正在表演,那么值得使用ENUM类型。由于索引性能更好,大表可能会更快。
使用它的方式(来源:http://dev.mysql.com/doc/refman/5.5/en/enum.html):
CREATE TABLE shirts (
name VARCHAR(40),
size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
);
但是,我总是说解释这样的查询:
EXPLAIN SELECT * FROM shirts WHERE size='medium';
将告诉您有关查询的大量信息,并帮助您构建更好的表结构。 为此,让phpmyadmin建议一个表表结构是有用的 - 但是当表已经填充了大量数据时,这是一个很长时间的优化可能性。