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

Poprawa wydajności MySQL w zapytaniu jednorazowym z dużym zbiorem danych

Moje przeczucie jest takie, że z niepodpisanym int i varchar 40 (zwłaszcza varchar!) masz teraz OGROMNY klucz podstawowy i sprawia to, że twój plik indeksu jest zbyt duży, aby zmieścić się w dowolnej pamięci RAM, którą masz dla Innodb_buffer_pool. To spowodowałoby, że InnoDB musiałby polegać na dysku, aby wymieniać strony indeksu podczas wyszukiwania, a to jest DUŻO poszukiwań dysku, a nie dużo pracy procesora.

Jedną z rzeczy, które zrobiłem w przypadku podobnego problemu, jest użycie czegoś pomiędzy kluczem prawdziwie naturalnym a kluczem zastępczym. Wzięlibyśmy 2 pola, które są faktycznie unikalne (z których jedno było również varchar) i w warstwie aplikacji utworzylibyśmy hash MD5 o stałej szerokości i użylibyśmy TEGO jako klucza. Tak, oznacza to więcej pracy dla aplikacji, ale powoduje to znacznie mniejszy plik indeksu, ponieważ nie używasz już pola arbitralnej długości.

LUB możesz po prostu użyć serwera z tonami pamięci RAM i sprawdzić, czy indeks zmieści się w pamięci, ale zawsze lubię robić „rzucanie sprzętu” w ostateczności :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nieznana kolumna w podzapytaniu mysql

  2. Blokowanie wiersza MySQL INNODB w PHP

  3. Użyj zapytania wybierającego w zapytaniu Wstaw dla tej samej nazwy tabeli

  4. Zapytanie SQL do warunkowego pobierania rekordów na podstawie listy kluczy-wartość

  5. Parsowanie pliku xml i przechowywanie go w bazie danych