Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL ERKLÄREN:Index verwenden vs. Indexbedingung verwenden

Ein Beispiel erklärt es am besten:

SELECT Year, Make --- possibly more fields and/or from extra tables
FROM myUsedCarInventory
WHERE Make = 'Toyota' AND Year > '2006'

Assuming the Available indexes are:
  CarId
  VIN
  Make
  Make and Year

Diese Abfrage würde mit 'Using Index' ERKLÄREN, weil sie überhaupt nicht benötigt wird , um die myUsedCarInventory-Tabelle selbst zu "treffen", da der Index "Marke und Jahr" ihren Bedarf "abdeckt" in Bezug auf die Elemente der WHERE-Klausel, die sich auf diese Tabelle beziehen .

Stellen Sie sich nun vor, wir behalten die gleiche Abfrage bei, aber für das Hinzufügen einer Bedingung für die Farbe

...
WHERE Make = 'Toyota' AND Year > '2006' AND Color = 'Red'

Diese Abfrage würde wahrscheinlich mit 'Using Index Condition' EXPLAIN (das 'wahrscheinlich', hier ist für den Fall, dass Toyota + Jahr nicht als selektiv genug geschätzt wird und der Optimierer entscheiden kann, nur die Tabelle zu scannen). Dies würde bedeuten, dass MySQL ZUERST Verwenden Sie den Index, um die Marke + Jahr aufzulösen, und es müsste auch die entsprechende Zeile in der Tabelle nachschlagen, nur für die Zeilen, die die Make + Year-Bedingungen erfüllen. Das wird manchmal als „Pushdown-Optimierung ".