Mysql 检查空文本字段是否对性能有害?

Mysql 检查空文本字段是否对性能有害?,mysql,Mysql,我有一个游戏服务,我的一些“游戏室”有密码保护。在游戏的公开列表中,我只想获取没有密码的游戏。我的桌子看起来像: id | gameName | date | password | --------------------------------- 1 foo 123 null 2 grok 456 abc ... 因此,我想知道,在寻找公共游戏时,执行以下操作是否符合性能要求: SELECT * FROM games WHERE pass

我有一个游戏服务,我的一些“游戏室”有密码保护。在游戏的公开列表中,我只想获取没有密码的游戏。我的桌子看起来像:

id | gameName | date | password | 
---------------------------------
 1   foo        123    null
 2   grok       456    abc
 ...
因此,我想知道,在寻找公共游戏时,执行以下操作是否符合性能要求:

SELECT * FROM games WHERE password != null ORDER BY date LIMIT 50;
(我不知道!=null部分的语法)但是考虑到存在类似的情况,这是否会导致性能下降?我是否应该添加一个名为“isPublic”的附加列,它只是一个小int,值为{0,1}表示{false,true}?然后我可以做:

SELECT * FROM games WHERE isPublic = 1 ORDER BY date LIMIT 50;
我想我必须在“isPublic”上加一个索引才能获得最好的性能

完全错了


谢谢

否,null在SQL DBs中绝对是一个一阶值。没有理由让您受到任何类型的性能影响


话虽如此,做一个测试将是琐碎且有益的,所以这是我的建议。

不,null在SQL DBs中绝对是一个一阶值。没有理由让您受到任何类型的性能影响


话虽如此,做一个测试将是琐碎而有益的,因此这是我的建议。

您可能会对以下内容感到满意:

SELECT * FROM games WHERE password IS NULL ORDER BY date LIMIT 50;
事实上,MySQL已优化为将NULL用作普通值:


我看到的唯一问题是语义有点隐藏,但就性能而言,您可能会很好地为这个特定问题做一些基准测试。

您可能会对以下方面感到满意:

SELECT * FROM games WHERE password IS NULL ORDER BY date LIMIT 50;
事实上,MySQL已优化为将NULL用作普通值:


我看到的唯一问题是语义有点隐藏,但就性能而言,您可能会很好地为这个特定问题做一些基准测试。

据我所知,MySQL不支持true
BOOLEAN
,它只是一个
TINYINT(1)
。发件人:

布尔

这些类型是TINYINT(1)的同义词。考虑零的值 错。非零值被认为是真的

所以做一些类似于

SELECT * FROM games WHERE isPublic = 'true'

将是最坏的情况,因为您将比较字符串。也就是说,
null

没有什么问题,据我所知,MySQL不支持true
BOOLEAN
,它只是一个
TINYINT(1)
。发件人:

布尔

这些类型是TINYINT(1)的同义词。考虑零的值 错。非零值被认为是真的

所以做一些类似于

SELECT * FROM games WHERE isPublic = 'true'

将是最坏的情况,因为您将比较字符串。也就是说,
null

+1:Correct-
没有问题=用于实际值比较。要与NULL进行比较,需要使用
为NULL
为非NULL
+1:Correct-
=用于实际值比较。要与NULL进行比较,您需要使用
IS NULL
IS NOT NULL
。好的-为了测试,我认为mysql查询浏览器应该告诉您一个查询花费了多长时间(但不再看到它)。我也不知道这是否是一个好方法,不过我可以在实时数据上运行它。我想这完全取决于我的数据。好吧,为了测试,我认为mysql查询浏览器应该告诉你一个查询花了多长时间(但现在看不到了)。我也不知道这是否是一个好方法,不过我可以在实时数据上运行它。我想这完全取决于我的数据。