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

MySQL-forespørgselsoptimering af LIKE term% ORDER BY int

Du stillede et andet spørgsmål "Oprettelse af et indeks, der er bedst til jokertegnssøgning gennem 40 millioner navne". Okay, du har 40 millioner poster.

Overvej nu følgende formel:

x = COUNT(DISTINCT values in a column) / COUNT(values in a column)

Et indeks på en kolonne er meget bedre, jo nærmere x er til 1. Hvis det er 1, er alle værdier forskellige, der er ingen dubletter, og et indeks er derfor ret hurtigt.

Nu leder du efter 'john%'. Det er 4 bogstaver og en åben ende. Hvilke bogstaver er ikke vigtige, din DB skal håndtere 26*26*26*26=456976 forskellige værdier. Sæt det i ovenstående formel og dine 40 millioner poster. Du får en x af 0,0114244.

Jeg ved ikke hvad tærsklen er igen, men IIRC er det 0,1 eller noget. Så hvis du er x er over 0,1 bruges indekset, hvis det er lavere, er det ikke.

Hvorfor er det sådan? Brug af et indeks kan endda bremse tingene ned, fordi din DB er nødt til at se på indekset, se i det indeks på hvilken position på din fysiske harddisk den passende post er og derefter få den post. Derfor, når x er under 10 %, er det hurtigere bare at lave en hel tabelscanning.

For at opsummere:At filtrere 40 millioner poster med kun et svagt indeks som dit er simpelthen nytteløst.



  1. Hvordan bygger man et simpelt anmeldelses- og 5-stjernet ratingsystem?

  2. Hvorfor returnerer transaction.wasCommitted() falsk?

  3. En oversigt over Quests nyeste databaseovervågningstjeneste - Spotlight Cloud

  4. Forskellen mellem NULL og Blank Value i Mysql