MySQL index for MIN and MAX

橙三吉。 提交于 2019-12-04 10:56:22
SELECT MIN(b), MAX(b) FROM tbl WHERE a = 12;

loves

INDEX(a, b)

both columns, in that order.

The query looks in the index for a = 12, grabs the first (a,b) pair to get MIN(b) and grabs the last pair to get MAX(b).

The statement about "replacing with a constant" is confusing because it is going too deep into the details of how it first figures out how to perform the query (which happens to get the min and max), then proceeds to execute what is left of the query (nothing is left).

More generally, the optimal index is usually one that starts with all the WHERE columns compared to constants with =. After that it gets complex, so let me give another tip:

A "covering" index is one that has all the columns mentioned in the SELECT (a and b in my example).

Sorry, I don't seem to be clearer than the manual.

In their example they are not trying to find the min and max values of the column called key_col. They are trying to find the min and max of the second key in a multi-column key. The issue is further complicated since the query is limiting its search to the subset of the multi-column key set that is defined by having the key_part1 = 10.

10, 2, 3
10, 9, 5
10, 7, 7
10, 3, 1
10, 2, 5
11, 3, 0
11, 0, 3

So in this example the query selects only the rows where the first column is 10. Then it finds that among the rows with 10 in the first column the min for the second column is 2 and the max is 9. Notice that 0 in the second column is not chosen as the min because the first column does not match on 10. Hope that helps.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!