Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Konfiguracja indeksu MySQL

Aktualizacja:

Zobacz ten artykuł na moim blogu, aby uzyskać bardziej szczegółową analizę problemu:

Kiedy wydajesz coś takiego jak LIMIT 150000, 10 , oznacza to, że MySQL powinien przejść przez te 150,000 rekordy i znajdź następne 10 .

Przemierzanie indeksu jest powolne w MySQL .

Również MySQL nie jest zdolny do wyszukiwania późnych wierszy.

Teoretycznie, jeśli zrobisz ORDER BY id LIMIT 100000, 10 , wystarczy użyć indeksu, aby znaleźć wartości z 100000 do 100010 , a następnie wyszukaj tylko 10 wiersze, które spełniają ten indeks i zwracają je.

Wszystkie główne systemy z wyjątkiem MySQL są tego świadomi i sprawdzają wiersze tylko wtedy, gdy wartości rzeczywiście mają zostać zwrócone.

MySQL jednak sprawdza każdy wiersz.

Spróbuj przepisać zapytanie w ten sposób:

SELECT  news.*
FROM    (
        SELECT  id
        FROM    news
        WHERE   cat_id='4'
        ORDER BY
                id DESC
        LIMIT 150000, 10
        ) o
JOIN    news
ON      news.id = o.id



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najlepsza praktyka:Importuj plik mySQL w PHP; podzielone zapytania

  2. Zapytanie MySQL do ściągania elementów, ale zawsze pokazuje u góry pewien konkretny

  3. Skrypt sprawdzania kondycji replikacji MySQL

  4. Zmień zachowanie Session.delete() SQLAlchemy

  5. Kreator zapytań Laravel - Jak grupować według aliasów lub tworzyć surowe groupBy?