【发布时间】:2020-08-13 15:44:17
【问题描述】:
在select查询的以下模式中:
┌┐ ↘ ┌┐ ⎫┌┐ ┌┐
├┤ ↗ └┘ ⎭└┘ → └┘
├┤ ┌┐
├┤ → ├┤ ┌┐ ⎫
├┤ └┘ ↘ ├┤ ⎪ ↘ ┌┐
├┤ ↗ ├┤ ⎪┌┐ ↗ ├┤
├┤ → ┌┐ ↘ ├┤ ⎪└┘ ↘ └┘
├┤ └┘ └┘ ⎭ LIMIT
├┤ WHERE GROUP BY HAVING ORDER BY OFFSET
├┤
├┤ → ┌┐ ┌┐ ⎫
├┤ ├┤ ↗ ├┤ ⎪┌┐ ┌┐
├┤ └┘ ↘ ├┤ ⎪└┘ → └┘
├┤ → ┌┐ ↗ └┘ ⎭
├┤ └┘
├┤ ┌┐
└┘ └┘
我如何决定,哪个子句的列需要索引来提高性能?是ORDER BY吗?
【问题讨论】:
-
不,您首先使用索引来查找感兴趣的行。所以它是
WHERE。接下来要考虑的是GROUP BY。 -
顺便说一句,这是一个很好的图形表示。显示了查询从左到右经历的阶段。并且索引是按照相同的顺序构建的。
-
@ThorstenKettner 当我们在表(
t) 列上创建索引i时,是否需要对i或t运行select查询?索引后 -
在桌子上。查询不会改变。索引不会出现在查询中。可以说,索引是在幕后使用的,它为 DBMS 提供了一种快速访问表数据的方法 DBMS 可能会或可能不会在查询中为表使用一个或多个可用索引。如果在某个时间点我们决定为表引入(附加)索引,则可能不仅我们想到的查询运行得更快,而且其他几个查询也运行得更快。