2010-05-28 21 views
2

网站内容存储在MySQL数据库中。 99%的内容将被启用,但一些(用户,帖子等)将被禁用。大多数查询结束为WHERE (...) AND enabledindex'enabled'fields good idea?

在'enabled'字段上创建索引是否是个好主意?

回答

1

仅仅在enabled上创建索引就没有多大用处。但是,创建包含enabled的复合索引可能会很有用,以实现ORDER BY optimisation

例如,如果是这样,这是一个常见的查询:

SELECT * FROM things WHERE c1='foo' AND enabled=1 ORDER BY c2 

c1的索引将允许匹配行被迅速找到,但它仍然需要使用c2单独的步骤来进行排序。

c1, c2上的索引应允许从索引完成排序,大大加快了查询的排序,但索引中缺少enabled将会失败,因为它必须编译匹配行的列表索引c1,然后扫描每一行检查它的enabled排序结果c2

如果索引是enabled, c1, c2c1, enabled, c2,则可以从索引直接获取整个WHERE条件和ORDER,从而得到更快的结果。

一如既往,这取决于你在做什么查询;你应该通过EXPLAIN你最常用的查询来确定它正在做什么。

+0

你的想法正是缺少的重点。我决定将启用的字段添加到我期望得到巨大结果集的表中。因为总是有一个ORDER子句,所以这会减少已启用行的扫描时间。但对于我只期望几场比赛的桌子,一个一个的扫描就不会有什么区别。 – sibidiba 2010-05-29 12:51:10

相关问题