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

Składnia MySQL i wydajność OR

Odpowiedź Jasona jest na miejscu. Dodatkowo spróbowałbym użyć bardziej nowoczesnej składni złączenia ANSI, aby odciążyć klauzulę WHERE, aby zmniejszyć zamieszanie:

SELECT o.id
FROM programs o
JOIN titles_programs t ON t.object_id=o.id
JOIN descriptions_programs d ON d.object_id=o.id
WHERE MATCH (d.text) AGAINST ('+china' IN BOOLEAN MODE) AND d.current=1
OR MATCH (t.text) AGAINST ('+china' IN BOOLEAN MODE) AND t.current=1

To zatrzyma nieumyślne połączenie krzyżowe powodujące eksplozję kombinatoryczną; Spodziewam się, że będzie działać w rozsądnym czasie, chyba że baza danych będzie naprawdę ogromna.

Jeśli nie, czy możesz opublikować wyniki WYBIERZ Z POW. Przypuszczalnie jeden lub oba indeksy pełnotekstowe nie są używane. Z pewnością mógłbym sobie wyobrazić, że optymalizator zapytań nie użyje drugiego indeksu pełnotekstowego, wykonując coś takiego jak próba „wypełnienia” wierszy, które nie pasują do pierwszego zapytania pełnotekstowego, zamiast przechodzenia bezpośrednio do indeksu lub coś takiego.

Zwykle, gdy chcesz indeksować pełnotekstowo w dwóch kolumnach w połączeniu, tworzysz jeden indeks w obu kolumnach. W każdym razie byłoby to znacznie szybsze. Oznaczałoby to jednak, że musisz umieścić tytuły i opisy w tej samej tabeli. To może nie być takie trudne:ponieważ pełny tekst działa tylko w tabelach MyISAM (i zazwyczaj nie chcesz, aby Twoje dane kanoniczne były w tabelach MyISAM), możesz zachować ostateczną kopię swoich danych w odpowiednio znormalizowanych tabelach InnoDB, z dodatkową tabelą MyISAM zawiera tylko przynętę pozbawioną i łodygi.

Jeśli nic z tego nie jest dobre... cóż, myślę, że wrócę do UNIONing, o którym wspomniałeś, w połączeniu z filtrem na poziomie aplikacji, aby usunąć zduplikowane identyfikatory.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie udało się załadować klasy sterownika com.mysql.jdbc.Driver

  2. Nie można załadować sterownika macOS Connector/MySQL ODBC w programie Excel dla komputerów Mac 2016

  3. Porównanie kodu pocztowego MySQL PHP, a konkretnie odległość

  4. Przestarzałe funkcje MySQL

  5. Warunkowa transformacja podziału:eksport danych z serwera SQL do baz danych Oracle i MySQL