sql >> Database >  >> RDS >> Mysql

Beste type indexering als er een LIKE-clausule is

Ja, wat je hier hebt is een database-killer

Een B-tree-index kan worden gebruikt voor kolomvergelijkingen in uitdrukkingen die de operatoren =,>,>=, <, <=of BETWEEN gebruiken. De index kan ook worden gebruikt voor LIKE-vergelijkingen als het argument voor LIKE een constante tekenreeks is die niet begint met een jokerteken.

Bron:http://dev.mysql.com /doc/refman/5.7/en/index-btree-hash.html

Dus dat betekent dat je LIKE-query de index niet kan gebruiken en dan heb je twee likes verbonden met een OR. Als dat nog niet genoeg is, heb je ook nog een NOT IN-vergelijking toegevoegd.

Maar gelukkig is de tweede LIKE-expressie niet zo erg, hij begint niet met een wildcard. Dus je kunt het beste een samengestelde index maken op usage_guidance, name

Als u uw SHOW CREATE TABLE en een paar regels voorbeeldgegevens + de verwachte output zou kunnen posten, zouden we een idee kunnen krijgen of er een manier is om deze query te herschrijven.




  1. foreach %dopar% + RPostgreSQL

  2. Postgres-functie NULL-waarde voor rij die verwijst naar NEW

  3. Een kolom uitsluiten met SELECT * [behalve columnA] FROM tableA?

  4. Hoe de laatste invoeg-ID in Oracle te verkrijgen met MyBatis?