首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过布尔值进行SQL (mySQL)优化

通过布尔值进行SQL (mySQL)优化
EN

Stack Overflow用户
提问于 2011-10-26 02:48:36
回答 2查看 524关注 0票数 4

我正在做一个副项目,这是一个相当大的任务;我的问题是使用布尔值来确定是否需要进一步的数据处理时获得的效率。

例如:如果我有一个表,列出了所有的生物。在另一张本质上相关的表格中,列出了他们的冬眠时期,以及在冬眠期间每天消耗的卡路里。

在(Creatures)表中为"hibernates“布尔值是否有效?

如果为真,则转到"hibernation_creature_info_relations“表,找到具有该ID的生物并返回该信息。

这意味着对于其"hibernates“值为false的所有生物,将防止SQL必须搜索大表”hibernation_creature_info_relations“。

或者在使用ID时,检查"hibernation_creature_info_relations“表的过程是否如此之快,以至于必须处理基于休眠的值设置为true或false来执行什么操作的参数,从而实际上会对性能产生更大的影响?

我希望这是足够的信息,以帮助您理解我的要求,如果没有,请让我知道,以便我可以重新措辞或包括更多细节。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-26 02:52:37

不,这不是一种好的做事方式。

请改用可以为null的普通字段。

示例

代码语言:javascript
复制
table creatures
---------------
id     name      info_id

1      dino      null
2      dog       1
3      cat       2

table info
--------------
id     info_text

1      dogs bark
2      cats miauw

现在你可以做一个join:

代码语言:javascript
复制
SELECT c.name, i.info_text
FROM creature c
LEFT JOIN info i ON (c.info_id = i.id)

如果这样做,SQL就可以使用索引。

任何SQL数据库都不会在布尔型字段上创建索引。

该字段的基数太低,在基数较低的字段上使用索引会降低速度,而不是加快速度。

请参阅:MySQL: low cardinality/selectivity columns = how to index?

票数 5
EN

Stack Overflow用户

发布于 2011-10-26 03:04:10

如果你想使用列"hibernates“来防止SQL不得不搜索另一个表,那么你应该跟随@Johan,否则你可以在列"hibernates”上创建索引,这样会缩短执行时间。但请记住@Johan试图告诉你的是什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7894296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档