是否可以优化获取表中所有行的查询

时间:2016-09-24 05:56:21

标签: mysql optimization indexing

我有这个查询

SELECT id, alias, parent FROM `content`

有没有办法优化此查询,以便'键入'不同于所有'

id - 主要,唯一

id - index

父母 - 指数

别名 - 索引

...

请注意,此查询几乎不会返回超过1500行。

谢谢

2 个答案:

答案 0 :(得分:0)

您的查询正在获取所有行,因此根据定义,它将报告" ALL"作为EXPLAIN报告中的查询类型。唯一的另一种可能性是"指数"查询类型,索引扫描,它访问索引中的每个条目。但这与桌面扫描的成本几乎相同。

有一种说法是,最快的SQL查询是您根本不运行的查询,因为您可以通过其他方式获取数据。

例如,如果数据位于某种类型的缓存中。如果您的数据不超过1500行,并且它不经常更改,则它可能是放入内存的良好候选者。然后,只有在缺少缓存数据时才运行SQL查询。

有几个常见的选择:

  • MySQL query cache是MySQL服务器中维护的内存缓存,当表中的数据发生变化时会自动清除。

  • Memcached是一种流行的内存中键值存储,也常用于使用MySQL的应用程序。它非常快。另一个选项是Redis,它类似但也受磁盘存储支持。

答案 1 :(得分:0)

转动OFF log_queries_not_using_indexes;它像你得到的那样用红色鲱鱼弄乱慢慢的日志。

0.00XX秒 - 足够好,不用担心。

ALL实际上最适合从表的“所有”行中提取多个列。