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

Poprawa wydajności indeksów MySQL - kolumny w wielu indeksach?

Tylko krótka uwaga, ponieważ tego rodzaju rzeczy są widywane w kółko:JOIN na prism_worlds jest niepotrzebne, ponieważ (najprawdopodobniej) nie potrzebujesz danych z tej tabeli. Zasadniczo pytasz bazę danych "podaj mi każdą nazwę światów, dla których nazwa jest równa 'coś'". Zamiast tego użyj podzapytania skalarnego.

Utwórz unikalny indeks na prism_worlds.world i uruchom zapytanie, takie jak

SELECT *
FROM prism_data 
WHERE prism_data.world_id = (SELECT w.world_id FROM prism_worlds AS w WHERE w.world = 'DeuxTiersMondes')
LIMIT 1000;

Optymalizator zorientuje się, że prism_data.world_id jest ograniczony do jednej stałej wartości. MySQL uruchomi zapytanie z wyprzedzeniem, aby określić tę wartość i użyć jej w całym zapytaniu. Zobacz EXPLAIN dla const -wykonano podzapytanie.

Odnośnie do prism_data.x , .y i .z :Możesz chcieć utworzyć kolumnę geometrii i indeks przestrzenny do tego. Jeśli musisz trzymać się oddzielnych wartości, możesz chcieć podzielić całą geometrię świata na woksele o stałym rozmiarze (reprezentowane przez pojedynczy int) i użyć prostej geometrii, aby dowiedzieć się, która pozycja przypada na który woksel.

Moim osobistym rozwiązaniem byłoby nie zastanawianie się nad dodawaniem dziesiątek milionów zapytań do tego stołu. Indeksy spowodują, że będzie powolny i duży. Użyj zadania crona, aby wypełnić tabelę raportowania (widok zmaterializowany), aby wygenerować wyniki z wyprzedzeniem i używaj ich, dopóki zadanie crona pojawi się i zaktualizuje je ponownie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak sprawić, by zapytanie mysql było stale odświeżane w PHP?

  2. MySQL Connector ODBC odbc.ini Wartości flagi „Opcja”

  3. MySQLNonTransientConnectionException:Nie można utworzyć połączenia z serwerem bazy danych

  4. PDO Nie można wykonywać zapytań, gdy inne niebuforowane zapytania są aktywne

  5. Pole MySQL DATETIME obcina ISO8601