我需要将值设置为“是或否”
列名称STATUS
。我正在考虑两种方法。
方法1(使用字母):设置值Y/N
,然后通过查询在字段STATUS
中查找具有值Y
的所有行像:
SELECT * FROM post WHERE status="Y"
方法2(使用数字):设置值1/0
,然后通过查询查找字段STATUS
中值为1
的所有行像:
SELECT * FROM post WHERE status=1
我应该使用方法1还是方法2?哪一个更快?哪个更好?
最佳答案
两者本质上是等价的,因此这成为一个更适合您的应用程序的问题。
如果您关心空间,那么一个字符的最小空间是 char(1)
,使用 8 位。对于数字,您可以使用位或集合类型来打包多个标志。但是,只有当您有很多标志时,这才会产生影响。
将其存储为数字的方法有一点优势,您可以通过执行以下操作来计算"is"值:
select sum(status)
(当然,在 MySQL 中,这只是对 sum(status = 'Y')
的微小改进。
如果您决定在将来的某个时刻包含“也许”或其他值,则“将其存储为字母”方法具有轻微的优势。
最后,以不同方式表示这些值的性能差异将非常非常小。您需要一个包含数百万行的表才能开始注意到问题。因此,请使用最适合您的应用程序的机制和表示值的方式。
关于MySQL - 按数字或字母查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22733898/