【发布时间】:2011-10-25 18:48:35
【问题描述】:
我正在做一个相当艰巨的副项目;我的问题是关于使用 BOOLEAN 值来确定是否需要进一步处理数据时所获得的效率。
例如:如果我有一张列出所有生物的表格。在另一个本质上是相关的表格中列出了它们的冬眠期,以及冬眠期间每天消耗的卡路里。
在 (Creatures) 表中设置“hibernates”布尔值是否有效。
如果为真,则转到“hibernation_creature_info_relations”表并找到具有该 ID 的生物并返回该信息。
这意味着对于 "hibernates" = false 值的所有生物,将阻止 SQL 搜索 "hibernation_creature_info_relations" 的大表。
或者当使用 ID 时,检查“hibernation_creature_info_relations”表的过程如此之快,以至于必须处理基于休眠值是否设置为的参数,实际上会对性能产生更大的影响是真是假?
我希望这些信息足以帮助您理解我的要求,如果没有,请告诉我,以便我重新措辞或提供更多详细信息。
【问题讨论】:
-
在另一个表中复制 hibernate 字段不会有太多好处。减少数据集大小所带来的任何速度提升都将因必须首先加入原始表而被抵消。
-
另外,请记住,与命令式语言不同,您(通常)对 SQL 中的执行顺序/优化几乎没有控制权。那是优化器的工作,它可以做各种各样的事情来“尝试”加速查询——包括重新排序连接、使用表扫描、切换索引、选择不同的排序以及创建临时表。也没有真正的短路逻辑之类的东西,尤其是在连接的上下文中(优化器可以随意乱用它们)。
标签: mysql sql optimization