我可以在 MySQL tinyInt 上建立索引吗?
Posted
技术标签:
【中文标题】我可以在 MySQL tinyInt 上建立索引吗?【英文标题】:Can I index on a MySQL tinyInt? 【发布时间】:2015-01-11 03:24:37 【问题描述】:我正在尝试使页面加载速度非常快。为了在这方面为我提供帮助,我想查询一个严格基于布尔列的表。
在我的例子中,该表中相对较少的行将此布尔列设置为 true,其余的将为 false。
数据库通常可以制作一个漂亮的小搜索树,也就是说,如果你想要 false 就向左走,如果你想要 true 就向右走,以获取它们各自的主键列表?
【问题讨论】:
你可以,它可能会有所帮助。但一如既往:尝试并以两种方式进行基准测试。 另外,您是否确定 SQL 时间在您的总加载时间中很重要? 数据库可以做到这一点,但实际上小表搜索可能只是优化到表扫描。EXPLAIN
将帮助您确定最佳方法。
【参考方案1】:
当然你可以在上面放一个索引。
然后你可以运行这样的查询:
SELECT *
FROM mytable
WHERE mybool = 1
AND [another condition here]
添加的索引将确保第二个条件仅在 mybool 设置为 1 的记录上运行,这在理论上会使您的查询更快(假设 mybool = 1
具有高基数和大量行)。
请注意,正确使用索引可以提高读取速度,但会降低写入速度,因为在插入期间需要更新索引。
编辑:根据要求,添加索引:
ALTER TABLE mytable ADD INDEX (mybool)
【讨论】:
为我节省了 0.3 秒。我没想过要尝试索引类型“KEY” 现在需要 0.008 秒。因此,加速非常显着。 这个表将有数以百万计的记录。然而只有几千人会被标记为真的 我已经添加了那部分。 有关技术细节,请阅读Index Merge Optimization。或者,您可以有一个多列索引。以上是关于我可以在 MySQL tinyInt 上建立索引吗?的主要内容,如果未能解决你的问题,请参考以下文章