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

Wydajność MySQL polegająca na dodawaniu zapytań o kolumny w klauzuli where

@e4c5 ma rację, że żaden z indeksów nie pomoże w bieżącym zapytaniu. Możesz zacząć od dodania następujących indeksów i zmienić zapytanie za pomocą dodatkowych warunków, aby indeksy zostały wykorzystane:

ALTER TABLE myTable
ADD INDEX(categoryId, value1),
ADD INDEX(categoryId, value2),
ADD INDEX(categoryId, value3),
ADD INDEX(categoryId, value4);

I zaktualizuj zapytanie w ten sposób:

SELECT * FROM myTable WHERE categoryId = 1 AND (value1 <= 9) AND (value2 <= 9) AND (value3 <= 9) AND (value4 <= 9) AND (value1 + value2 + value3 + value4) > 9;
SELECT * FROM myTable WHERE categoryId = 1 AND (value1 <= 5) AND (value3 <= 5) AND (value4 <= 5) AND (value1 + value3 + value4) > 5;

Dodatkowe warunki pomagają zawęzić liczbę rzędów do przetworzenia. Dodanie indeksów w większej liczbie kolumn przyspieszyłoby to jeszcze bardziej, ale sugeruję najpierw spróbować tego.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Grupuj według i policz wiele pól

  2. SQL użyj kolumny z subselect w klauzuli where

  3. zoptymalizuj zapytanie licznika mysql

  4. Wiele sprzężeń z SQLAlchemy

  5. Jakiś powód, aby nie używać procedur składowanych dla każdego zapytania?