【发布时间】:2013-08-27 12:06:22
【问题描述】:
我有一个包含 id (INT, primary key), name(VARCHAR), status(TINYINT) 列的帖子表。帖子的状态可以是1, 2, 3 or 4。并且,比如说,我想选择状态为 2 的帖子。如何优化表以进行快速查询,因为为状态字段添加索引并没有太大帮助。
我使用 mysql 5.5。引擎可以是innodb 或myisam。
谢谢
更新到 cmets
据我了解索引是如何工作的,当我们添加索引时,它有点创建该列的副本,但以有序的方式 - 数字(或文本 - 字母顺序),所以它提供了二进制的可能性搜索。因此,如果我们需要找到某个值,我们可以避免对表进行全扫描。但在这种情况下,假设我的表中有 100K 行,并且粗略地说 - 状态为 1, 2, 3 and 4 的行数相等。如果我为该字段添加索引,毕竟它应该对剩余的 25k 行进行线性搜索,并且如果我们考虑到添加索引会减慢插入和更新速度,那么它可能不值得。
查询 - SELECT id, name FROM posts WHERE status = 2
【问题讨论】:
-
为什么为状态字段添加索引没有那么大的帮助?
-
为什么添加索引不能加快查询速度?你在做什么类型的查询?请举个例子。
-
究竟有哪些查询需要优化?
-
在不了解表结构和查询的情况下尝试提供优化查询的建议是没有意义的。
-
@Andrius Naruševičius 坏主意,这被称为 SQL 反模式。因为您将元数据放入表名中..