sql >> Databáze >  >> RDS >> Mysql

Indexování MySQL a používání řazení souborů

Ve vašem prvním dotazu se ORDER BY provádí pomocí views_point INDEX, protože byl použit v části WHERE dotazu a tudíž v MySQL lze použít k řazení.

Ve druhém dotazu MySQL řeší část WHERE pomocí jiného indexu, listing_pcs . Toto nelze použít ke splnění podmínky OBJEDNÁVKA. MySQL místo toho používá řazení souborů, což je nejlepší volba, pokud nelze použít index.

MySQL používá indexy k řazení pouze v případě, že je index stejný jako index použitý v podmínce WHERE. Toto je příručka znamená:

Co tedy můžete udělat:

  1. Zkuste zvětšit sort_buffer_size config, aby bylo třídění souborů co nejúčinnější. Velké výsledky, které jsou příliš velké pro třídicí vyrovnávací paměť, způsobují, že MySQL rozděluje řazení na kousky, což je pomalejší.

  2. Vynutit MySQL, aby zvolil jiný index. Stojí za zmínku, že různé verze MySQL volí výchozí indexy odlišně. Například verze 5.1 je dost špatná, protože Query Optimizer byl pro toto vydání značně přepsán a potřeboval spoustu vylepšení. Verze 5.6 je docela dobrá.

    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. Použití OR v LIKE Query v MySQL k porovnání více polí

  2. Sada výsledků PHP Foreach na MySQLi

  3. Najděte uživatele v Laravel podle uživatelského jména

  4. Převedení hexu na obrázek v PHP?