我可以在 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 上建立索引吗?的主要内容,如果未能解决你的问题,请参考以下文章

mysql “索引”能重复吗?“唯一索引”与“索引”区别是啥?

mysql中如何建立视图?

mysql 索引

MySQL最多可建立多少索引和索引的限制

mysql支持多用户同时读写吗

mysql-优化一