sql >> Database teknologi >  >> RDS >> Mysql

Mysql samme querys en med indeks sekund uden at få 10000xFetch tid?

OR UPPER(lu.opis) LIKE UPPER('%SomeName%')

har 3 ydeevneproblemer:

  • OR er dårligt optimeret. I det væsentlige skal tabellen scannes for at kontrollere alle rækker. Indekser hjælper næppe.
  • UPPER(indexed-column) forhindrer brug af et indeks på den kolonne. Dette er nemt at omgå at erklære den kolonne for at have en COLLATION det er "case-insensitive" -- det vil sige noget som utf8_unicode_ci; bemærk _ci .
  • LIKE '%... kan ikke bruge et indeks på grund af førende jokertegn.

Derudover er det normalt tåbeligt at have

32497 row(s) returned

Hvad skal du med så mange rækker? Netværksoverførselstiden vil være betydelig, selvom selve forespørgslen ikke er det.

For at "løse" LIKE , OR og UPPER problemer på én gang, samle teksten sammen i en enkelt kolonne i en enkelt tabel. Angiv derefter en FULLTEXT indeks på den kolonne. Den, MATCH ... AGAINST ... vil køre meget hurtigere -- i det mindste for at udføre SomeName Søg. (De LEFT JOINs er en anden sag.)




  1. Hvordan kontrolleres resultaterne af SSIS-pakkejob, efter at den har fuldført sin udførelse?

  2. Hvordan opretter man en forespørgsel med to gange forbindelse til en tabel i Laravel 5.3?

  3. Sådan forbinder du Oracle Database til Visual Studio C#-projektet

  4. Kan ikke indlæse data fra fil til Oracle-tabel ved hjælp af executeMany()