Wij nemen een InnoDB tabel 'demo':
Wij plaatsen een index op:
Wij runnen de volgende query:
MySQL (en PostgreSQL overigens ook niet; zojuist geprobeerd) is dan niet in staat om de index te gebruiken. Een EXPLAIN laat dan zien dat er een full table scan wordt uitgevoerd, overeenkomstig de MySQL documentatie:
http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
Zijn hier work arounds / oplossingen voor?
code:
1
| id, owner_id, group_id, demo1, demo2, etc... |
Wij plaatsen een index op:
code:
1
| owner_id, group_id |
Wij runnen de volgende query:
SQL:
1
2
3
| SELECT id, demo1, demo2 FROM demo WHERE owner_id = 1 OR group_id = 2 |
MySQL (en PostgreSQL overigens ook niet; zojuist geprobeerd) is dan niet in staat om de index te gebruiken. Een EXPLAIN laat dan zien dat er een full table scan wordt uitgevoerd, overeenkomstig de MySQL documentatie:
http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
Kortom; de owner_id en group_id staan in een andere AND-group, waardoor de index niet wordt gebruikt.Any index that does not span all AND levels in the WHERE clause is not used to optimize the query. In other words, to be able to use an index, a prefix of the index must be used in every AND group.
Zijn hier work arounds / oplossingen voor?