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

Dlaczego wydajność zapytań MySQL jest tak słaba, gdy używa się indeksu CHAR/VARCHAR?

Oczywiście problem polega na tym, że zapytanie wykonuje skanowanie indeksu. Alternatywnym podejściem byłoby wykonanie dwóch wyszukiwań indeksu dla pierwszej i ostatniej wartości, które są takie same, a następnie użycie metainformacji w indeksie do obliczeń. Bazując na Twoich obserwacjach, MySQL robi obie te rzeczy.

Reszta tej odpowiedzi to spekulacje.

Powodem, dla którego wydajność jest „tylko” 300 razy wolniejsza, a nie 200 000 razy wolniejsza, jest narzut związany z odczytem indeksu. W rzeczywistości skanowanie wpisów jest dość szybkie w porównaniu do innych potrzebnych operacji.

Istnieje zasadnicza różnica między liczbami a ciągami, jeśli chodzi o porównania. Silnik może po prostu spojrzeć na bitowe reprezentacje dwóch liczb i rozpoznać, czy są one takie same, czy różne. Niestety w przypadku ciągów trzeba wziąć pod uwagę kodowanie/porównanie. Myślę, że właśnie dlatego musi przyjrzeć się wartościom.

Możliwe, że gdybyś miał 216 000 kopii dokładnie ten sam ciąg, wtedy MySQL będzie w stanie wykonać zliczanie za pomocą metadanych w indeksie. Innymi słowy, indeksator jest wystarczająco inteligentny, aby używać metadanych do dokładnych porównań równości. Ale nie jest wystarczająco sprytne, aby brać pod uwagę kodowanie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. dlaczego to zapytanie mysql nie działa?

  2. Przepraszamy, ale coś poszło nie tak. po wdrożeniu do Heroku

  3. Jak przeszukiwać wiele kolumn z priorytetem w MySQL?

  4. mysql po wstawieniu wyzwalacza, który aktualizuje kolumnę innej tabeli

  5. PHP:Pokaż okno dialogowe potwierdzenia tak/nie