Unofficial MySQL 8.0 Optimizer Guide
unofficialmysqlguide.com
unofficialmysqlguide.com
http://www.unofficialmysqlguide.com/composite-indexes.html#d...
Because I had previously read that it was a myth:
https://use-the-index-luke.com/sql/myth-directory/most-selec...
Both this guide and Use The Index Luke seem to be good resources. Later I realized that maybe the guide had listed this optimization tips in order of importance. After all "1. Leftmost rule" and "2. Ranges to the right" are the ones that affect the most the usability of the index. Then the seemingly opposite viewpoints converge.
Selectivity of the column in principle matters to reduce the time spent doing comparisons to find the right slot in each btree page; if more selective columns are at the end, the comparison function will have to scan through more of the index data to determine ordering.
Much more important, IMO, is reuse of the index. If you frequently use predicates referencing N-1 columns and have an index on N columns, you're better off if the least used column is in the Nth position. I think this is what the article was trying to get at, if somewhat hamfistedly.
Yes - the text right above this says that: "Determining the correct order of columns in a composite index is tricky. Here are some considerations to be aware of .."
I think myth is a strong word. It holds truth, but there are just so many exceptions.
I'll be expanding it in the coming months as the new features in MySQL 8.0 are released. On my TODO is descending indexes, improvements to OPTIMIZER TRACE, Window functions, CTEs and expanding the info on character sets.
Suggestions/comments welcome!
https://www.slideshare.net/DagHWanvik/sql-window-functions-f...
We do not have a date yet for MySQL 8.0, but it is coming closer. We are on a ~2-3 year release cycle with 5.7 released Oct 2015.
Many of the features of this guide are now specific to MySQL. MariaDB diverged from MySQL 5.5 (2010).
So you can see the invisible indexes page does this (8.0 only): http://www.unofficialmysqlguide.com/invisible-indexes.html
But there are subtitles where I don't go into full detail. For example here it didn't seem right to say that descending indexes are 8.0 only:
http://www.unofficialmysqlguide.com/composite-indexes.html#d...
(In my next update I'll have a section on descending indexes and I'll be specific here.)
The format of OPTIMIZER_TRACE looks different around things like sorting data. I'll always use the newer diagnostics which are more verbose.
But MariaDB diverged from MySQL 5.5 (2010); so there is a lot which is different.