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

MySQL-indeksering og brug af filer

I din første forespørgsel udføres ORDER BY ved hjælp af views_point INDEX, fordi det blev brugt i WHERE-delen af ​​forespørgslen og derfor i MySQL kan bruges til sortering.

I den anden forespørgsel løser MySQL WHERE-delen ved hjælp af et andet indeks, listing_pcs . Dette kan ikke bruges til at opfylde ORDER BY-betingelsen. MySQL bruger i stedet filesort, hvilket er den bedste mulighed, hvis et indeks ikke kan bruges.

MySQL bruger kun indekser til at sortere, hvis indekset er det samme som det, der bruges i WHERE-tilstanden. Dette er manualen betyder ved:

Så hvad kan du gøre:

  1. Prøv at øge din sort_buffer_size config mulighed for at gøre filsortering så effektiv som muligt. Store resultater, der er for store til sorteringsbufferen, får MySQL til at opdele sorteringen i bidder, hvilket er langsommere.

  2. Tving MySQL til at vælge et andet indeks. Det er værd at bemærke, at forskellige MySQL-versioner vælger standardindekser forskelligt. Version 5.1, for eksempel, er ret dårlig, da Query Optimizer var blevet meget omskrevet til denne udgivelse og havde brug for masser af forfining. Version 5.6 er ret god.

    SELECT *
    FROM listings
    FORCE INDEX (views_point)
    WHERE (`publishedon_hourly` BETWEEN
           UNIX_TIMESTAMP( '2015-09-5 00:00:00' )
           AND UNIX_TIMESTAMP( '2015-09-5 12:00:00' ))
      AND (published =1)
      AND cat_id IN ( 1, 2, 3, 4, 5 )
    ORDER BY `views_point` DESC
    LIMIT 10
    


  1. Få træsti i MySQL-tabel

  2. PHP &MYSQL:Brug af bcrypt-hash og verificering af adgangskode med database

  3. Installation af MySQL Python på Mac OS X

  4. Java Class.forName, JDBC-forbindelse indlæser driver