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

Procedura składowana mysql jest 20 razy wolniejsza niż standardowe zapytanie

Tylko zgadnij:

Po ręcznym uruchomieniu zapytania wyrażenie WHERE ('test' IS NULL or COL1 = 'test') można zoptymalizować podczas analizowania zapytania. Parser widzi, że ciąg 'test' nie jest null, więc konwertuje test na WHERE COL1 = 'test' . A jeśli istnieje indeks na COL1 to zostanie użyte.

Jednak podczas tworzenia procedury składowanej analizowanie odbywa się podczas tworzenia procedury. W tym czasie nie wie, co @param będzie i musi zaimplementować zapytanie jako sekwencyjne skanowanie tabeli.

Spróbuj zmienić procedurę na:

IF @param IS NULL
THEN BEGIN
  SELECT * FROM table1
  UNION ALL
  SELECT * FROM table2
  ...
END;
ELSE BEGIN
  SELECT * FROM table1 WHERE col1 = @param
  UNION ALL
  SELECT * FROM table2 WHERE col1 = @param
  ...
END;
END IF;

Nie mam dużego doświadczenia z procedurami składowanymi MySQL, więc nie jestem pewien, czy jest to właściwa składnia.



  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 całkowicie usunąć MySQL z Ubuntu?

  2. Konfiguracja wysokiej dostępności dla węzłów ClusterControl przy użyciu CMON HA

  3. Wywołanie niezdefiniowanej funkcji session_register()

  4. Błąd PDO:SQLSTATE[HY000]:Błąd ogólny:2031

  5. PHP Sortowanie najbliższych współrzędnych