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

Mysql indeks konfiguration

Opdatering:

Se denne artikel i min blog for en mere detaljeret analyse af problemet:

Når du udsteder noget som LIMIT 150000, 10 , betyder det, at MySQL skal krydse disse 150,000 poster og find den næste 10 .

Gennemgangen af ​​indekset er langsom i MySQL .

Også MySQL er ikke i stand til at foretage sene rækkeopslag.

Teoretisk set, hvis du gør ORDER BY id LIMIT 100000, 10 , er det nok at bruge indekset til at finde værdierne fra 100000 til 100010 , så slå kun 10 op rækker, der opfylder dette indeks og returnerer dem.

Alle større systemer undtagen MySQL er opmærksomme på det og slår kun rækkerne op, hvis værdierne virkelig skal returneres.

MySQL slår dog op i hver række.

Prøv at omskrive din forespørgsel som denne:

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. Sådan genereres script for at aktivere alle fremmednøglebegrænsninger i SQL Server-databasen - SQL Server / TSQL vejledning del 78

  2. Hvordan gemmer man NULL-værdier i datetime-felter i MySQL?

  3. Kompliceret SQL-forespørgsel - at finde elementer, der matcher flere forskellige fremmednøgler

  4. MySQL-serverstartproblemer på Mavericks