2
网站内容存储在MySQL数据库中。 99%的内容将被启用,但一些(用户,帖子等)将被禁用。大多数查询结束为WHERE (...) AND enabled
index'enabled'fields good idea?
在'enabled'字段上创建索引是否是个好主意?
网站内容存储在MySQL数据库中。 99%的内容将被启用,但一些(用户,帖子等)将被禁用。大多数查询结束为WHERE (...) AND enabled
index'enabled'fields good idea?
在'enabled'字段上创建索引是否是个好主意?
仅仅在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, c2
或c1, enabled, c2
,则可以从索引直接获取整个WHERE条件和ORDER,从而得到更快的结果。
一如既往,这取决于你在做什么查询;你应该通过EXPLAIN你最常用的查询来确定它正在做什么。
你的想法正是缺少的重点。我决定将启用的字段添加到我期望得到巨大结果集的表中。因为总是有一个ORDER子句,所以这会减少已启用行的扫描时间。但对于我只期望几场比赛的桌子,一个一个的扫描就不会有什么区别。 – sibidiba 2010-05-29 12:51:10