我正在做一个副项目,这是一个相当大的任务;我的问题是使用布尔值来确定是否需要进一步的数据处理时获得的效率。
例如:如果我有一个表,列出了所有的生物。在另一张本质上相关的表格中,列出了他们的冬眠时期,以及在冬眠期间每天消耗的卡路里。
在(Creatures)表中为"hibernates“布尔值是否有效?
如果为真,则转到"hibernation_creature_info_relations“表,找到具有该ID的生物并返回该信息。
这意味着对于其"hibernates“值为false的所有生物,将防止SQL必须搜索大表”hibernation_creature_info_relations“。
或者在使用ID时,检查"hibernation_creature_info_relations“表的过程是否如此之快,以至于必须处理基于休眠的值设置为true或false来执行什么操作的参数,从而实际上会对性能产生更大的影响?
我希望这是足够的信息,以帮助您理解我的要求,如果没有,请让我知道,以便我可以重新措辞或包括更多细节。
发布于 2011-10-26 02:52:37
不,这不是一种好的做事方式。
请改用可以为null的普通字段。
示例
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:
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?
发布于 2011-10-26 03:04:10
如果你想使用列"hibernates“来防止SQL不得不搜索另一个表,那么你应该跟随@Johan,否则你可以在列"hibernates”上创建索引,这样会缩短执行时间。但请记住@Johan试图告诉你的是什么。
https://stackoverflow.com/questions/7894296
复制相似问题