sql >> Databasteknik >  >> RDS >> Mysql

Varför prestanda för MySQL-frågor är så dåliga när man använder ett CHAR/VARCHAR-index?

Uppenbarligen är problemet att frågan gör en indexskanning. Det alternativa tillvägagångssättet skulle vara att göra två indexuppslagningar, för det första och sista värdet som är samma, och sedan använda metainformation i indexet för beräkningen. Baserat på dina observationer gör MySQL både och.

Resten av detta svar är spekulationer.

Anledningen till att prestandan "bara" är 300 gånger långsammare, snarare än 200 000 gånger långsammare, är på grund av overhead vid läsning av index. Att skanna posterna går faktiskt ganska snabbt jämfört med andra operationer som behövs.

Det finns en grundläggande skillnad mellan siffror och strängar när det kommer till jämförelser. Motorn kan bara titta på bitrepresentationerna för två tal och känna igen om de är lika eller olika. Tyvärr, för strängar, måste du ta hänsyn till kodning/sortering. Jag tror att det är därför man måste titta på värderingarna.

Det är möjligt att om du hade 216 000 exemplar av exakt samma sträng, då skulle MySQL kunna göra räkningen med hjälp av metadata i indexet. Med andra ord är indexeraren smart nog att använda metadata för exakta jämställdhetsjämförelser. Men det är inte smart nog att ta hänsyn till kodning.



  1. Kan inte använda den speciella principen "sa"

  2. Slå samman ett helt bord som en rad

  3. asp.net kärna Oracle.DataAccess System.BadImageFormatException:Det gick inte att ladda filen eller sammansättningen Oracle.DataAccess

  4. MySQL:Något fel med fulltextsökning - ger INGA resultat