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

Zapętl n razy bez użycia procedury składowanej

Dokumentacja MySQL na Instrukcje kontroli przepływu powiedz:

Dokumentacja przechowywane programy i widoki powiedz:

Składnia instrukcji złożonych

Wygląda więc na to, że możesz uruchomić wyraźną pętlę tylko w ramach procedury składowanej, funkcji lub wyzwalacza.

W zależności od tego, co robisz w instrukcji SQL, dopuszczalne może być użycie tabeli (lub widoku) liczb (Tworzenie "Tabeli liczb" w mysql , MYSQL:Tabela numerów sekwencyjnych ).

Jeśli Twoje zapytanie to SELECT i można zwrócić wynik twojego SELECT 10 razy w przypadku jednego długiego zestawu wyników (w przeciwieństwie do 10 oddzielnych zestawów wyników) możesz zrobić coś takiego:

SELECT MainQuery.*
FROM
    (
        SELECT 1 AS Number 
        UNION ALL SELECT 2
        UNION ALL SELECT 3
        UNION ALL SELECT 4
        UNION ALL SELECT 5
        UNION ALL SELECT 6
        UNION ALL SELECT 7
        UNION ALL SELECT 8
        UNION ALL SELECT 9
        UNION ALL SELECT 10
    ) AS Numbers
    CROSS JOIN
    (
        SELECT 'some data' AS Result
    ) AS MainQuery

Przykład INSERT

Polecam mieć w swojej bazie stałą tabelę liczb. Przydaje się w wielu przypadkach. Zobacz powyższe linki, jak je wygenerować.

Tak więc, jeśli masz tabelę Numbers z int kolumna Number z wartościami od 1 do powiedzmy 100K (tak jak ja) i kluczem podstawowym w tej kolumnie, a następnie zamiast tej pętli:

DECLARE count INT DEFAULT 0;
WHILE count < 10 DO
    INSERT INTO table_name(col1,col2,col3) 
    VALUES("val1","val2",count);

    SET count = count + 1;
END WHILE;

możesz napisać:

INSERT INTO table_name(col1,col2,col3)
SELECT ("val1", "val2", Numbers.Number-1)
FROM Numbers
WHERE Numbers.Number <= 10;

Będzie również działać prawie 10 razy szybciej.



  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 zoptymalizować ORDER BY dla kolumny wyliczanej na OGROMNEJ tabeli MySQL?

  2. przepisywanie modów, ślimaki tytułów i htaccess

  3. Wydajność MySQL:identyfikacja długich zapytań

  4. Jak dodać sterownik JDBC do potoku Jenkins?

  5. Jak zainstalować MySQL 8.0 na CentOS 8 / RHEL 8?