sql >> Database >  >> RDS >> Mysql

Hoe leg ik een query uit met parameters in MySQL

Zolang je alleen een gelijk aan doet (en niet een like, die kortsluitingseffecten kan hebben), vervang je deze gewoon door een waarde:

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

Aangezien de query niet daadwerkelijk wordt uitgevoerd, mogen de resultaten niet verschillen van de werkelijke. Er zijn enkele gevallen waarin dit niet waar is (ik noemde al LIKE). Hier is een voorbeeld van de verschillende gevallen van LIKE :

SELECT * FROM a WHERE a.foo LIKE ?
  1. Param 1 ==Foo - Kan een indexscan gebruiken als er een index bestaat.
  2. Param 1 ==%Foo - Vereist een volledige tabelscan, zelfs als er een index bestaat
  3. Param 1 ==Foo% - Kan een indexscan gebruiken, afhankelijk van de kardinaliteit van de index en andere factoren

Als je meedoet, en de waar-clausule leidt tot een onmogelijke combinatie (en dus kortsluiting). Bijvoorbeeld:

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

Als de eerste en tweede parameters hetzelfde zijn, heeft het één uitvoeringsplan, en als ze verschillend zijn, zal het kortsluiten (en 0 rijen retourneren zonder gegevens te raken)...

Er zijn er nog meer, maar dat is alles wat ik nu uit mijn hoofd kan bedenken...



  1. Automatisch verhogen van tabel-ID met behulp van tekenreekscombinatie in database

  2. De netwerkadapter kon geen verbinding tot stand brengen bij het verbinden met Oracle DB

  3. EF6 MySql:Update-Database -Script genereert SQL zonder puntkomma

  4. mysqli_query() retourneert altijd true