sql >> Databasteknik >  >> RDS >> Mysql

MySQL är mina index bra?

Skriv frågan så här:

SELECT *
    FROM orders
    JOIN users  ON orders.id_user = users.id
    WHERE orders.status='new'

Ange inte vilka index som ska användas.

Börjar med WHERE klausul, det ser ut som att det här kan vara användbar:INDEX(status) . Men eftersom "status" låter som en "flagga" med låg kardinalitet, kan optimeraren bestäm dig för att ignorera indexet och gör helt enkelt en tabellskanning. Det här är OK. Det är OK eftersom det är snabbare att göra en tabellskanning än att studsa mellan ett index och data, när indexet inte är särskilt selektivt. I vilket fall som helst, lämna beslutet till optimeraren.

Nu när det handlar om orders måste den JOIN till users . Det enda sättet att göra det är att ha ett index på id . Det namnet ("id") antyder att det kan vara PRIMARY KEY , är det? (Ange SHOW CREATE TABLE .)

Indexkokbok

Den andra frågan du nämnde bör skrivas

SELECT * FROM users WHERE id=33

Och, som redan diskuterats, indexet (PRIMARY KEY ?) på id är det rätta.

Det finns ingen fördel (för de givna SELECTs). , åtminstone) för INDEX(status, id_user) . Ditt urval inkluderar alla kolumner (* ); den hade bara hämtat id_user , då skulle ett sådant index vara "täckande" och ha en viss fördel.




  1. Hur man konverterar MySQL-data från sida till PDF

  2. Hur man lägger till en datafil till en SQL Server-databas (T-SQL)

  3. Hur skapar man en databas i SQL?

  4. grundläggande pyodbc bulkinsats