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

Łączenie Doctrine DQL na kolumnach dopuszczających wartość null

Rozwiązanie 1:Doctrine Native SQL

Jednym ze sposobów osiągnięcia tego jest użycie natywnych zapytań MySQL. Wymaga to użycia Natywny SQL doktryny funkcja i mapowanie wyników zapytania przy użyciu Mapowanie zestawu wyników .

Podczas dwukrotnego wykonywania natywnego zapytania SQL (z różnymi parametrami) napotkałem problem polegający na tym, że zestaw wyników drugiego zapytania był taki sam jak pierwszy.Obserwowany wpis w serwisie GitHub rozwiązał to dla mnie.

Rozwiązanie 2:Użycie wewnętrznego optymalizatora MySQL

Użycie następującego warunku przyłączenia spowoduje użycie wewnętrznego optymalizatora MySQL i potraktowanie go jako ref_or_null typ łączenia

SELECT a.*, b.* 
FROM a
   INNER JOIN b ON 
       a.column = b.column 
       OR (a.column IS NULL AND b.column IS NULL)

Możliwe jest wtedy użycie tego warunku złączenia w DQL, który będzie ładnie przetłumaczony w SQL w celu optymalizacji.

Rozwiązanie 3:Napisz niestandardową funkcję DQL

Napisałem niestandardową funkcję DQL, która została przetłumaczona w następującej klauzuli:

SELECT a.*, b.* 
FROM a
   INNER JOIN b ON (a.column <=> b.column) = 1

Niestety nie udało się pozbyć = 1 częścią tej klauzuli. To zadziałało, ale spowodowało poważne wpływ wydajności na moje zapytanie:17s vs 0,5s, aby dać pewne (nienaukowe) wskazanie.
Więc nie poszedłem dalej tą drogą.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dodaj klucz obcy MySQL

  2. Solr Indexing My SQL Timestamp lub Date Time pole

  3. Golang - Przechowywanie / pobieranie dziesiętnych z MySQL

  4. Czy powinienem wyłączyć tryb ścisły MySQL?

  5. Usuń zduplikowane wiersze w tabeli bez klucza podstawowego