sql >> Database >  >> RDS >> Mysql

Mysql-indexconfiguratie

Bijwerken:

Zie dit artikel in mijn blog voor een meer gedetailleerde analyse van het probleem:

Wanneer u iets als LIMIT 150000, 10 . uitgeeft , betekent dit dat MySQL moet deze 150,000 . oversteken records en vind de volgende 10 .

Het doorlopen van de index is traag in MySQL .

Ook MySQL is niet in staat om late row lookups uit te voeren.

Theoretisch, als u ORDER BY id LIMIT 100000, 10 , is het voldoende om de index te gebruiken om de waarden van 100000 . te vinden tot 100010 , zoek dan alleen 10 . op rijen die aan die index voldoen en ze retourneren.

Alle belangrijke systemen behalve MySQL zijn hiervan op de hoogte en zoeken de rijen alleen op als de waarden echt moeten worden geretourneerd.

MySQL zoekt echter elke rij op.

Probeer uw zoekopdracht als volgt te herschrijven:

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. Maanden toevoegen aan een datum in SQLite

  2. Hoe de serverstatus in MySQL Workbench te controleren met behulp van de GUI

  3. Hoe te controleren of een gebruiker al bestaat in MySQL met PHP

  4. SQL Server 2016:Verbeteringen voor beschikbaarheidsgroepen