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

Hvordan forklarer jeg en forespørgsel med parametre i MySQL

Så længe du kun laver en lig (og ikke et like, som kan have kortslutningseffekter), skal du blot erstatte det med en værdi:

EXPLAIN SELECT foo FROM bar WHERE some_column = 'foo';

Da det faktisk ikke udfører forespørgslen, bør resultaterne ikke afvige fra de faktiske. Der er nogle tilfælde, hvor dette ikke er sandt (jeg nævnte allerede LIKE). Her er et eksempel på de forskellige tilfælde af LIKE :

SELECT * FROM a WHERE a.foo LIKE ?
  1. Parameter 1 ==Foo - Kan bruge en indeksscanning, hvis der findes et indeks.
  2. Parameter 1 ==%Foo - Kræver en fuld tabelscanning, selvom der findes et indeks
  3. Parameter 1 ==Foo% - Kan bruge en indeksscanning, afhængigt af indeksets kardinalitet og andre faktorer

Hvis du deltager, og hvor-klausulen giver efter for en umulig kombination (og derfor vil den kortslutte). For eksempel:

SELECT * FROM a JOIN b ON a.id = b.id WHERE a.id = ? AND b.id = ?

Hvis den første og anden parameter er den samme, har den én udførelsesplan, og hvis de er forskellige, vil den kortslutte (og returnere 0 rækker uden at ramme nogen data)...

Der er andre, men det er alt, hvad jeg kan komme i tanke om lige nu...



  1. Forbedring af backend-ydeevne Del 2/3:Brug af databaseindekser

  2. Spring Boot Application sætter sig fast på Hikari-Pool-1 - Starter...

  3. SQL Server standard tegnkodning

  4. MySQL:hvordan dropper man flere tabeller ved hjælp af en enkelt forespørgsel?