sql >> Database teknologi >  >> RDS >> Mysql

MySQL-syntaks og 'ELLER'-ydelse

Jasons svar er i orden. Derudover ville jeg prøve at bruge den mere moderne ANSI join-syntaks til at tage belastningen af ​​WHERE-sætningen, så afhjælp forvirringen der:

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

Dette vil stoppe den utilsigtede krydsforbindelse, der forårsager en kombinatorisk eksplosion; Jeg ville forvente, at den ville fungere inden for rimelig tid, medmindre databasen var virkelig enorm.

Hvis ikke, kan du så sende resultaterne af et FORKLAR UDVALG af ovenstående? Formentlig bruges et eller begge fuldtekstindekser ikke. Jeg kunne helt sikkert forestille mig, at forespørgselsoptimeringsværktøjet ikke kunne bruge det andet fuldtekstindeks, ved at gøre noget som at prøve at "udfylde" de rækker, der ikke matchede den første fuldtekstforespørgsel i stedet for at gå direkte til indekset eller noget.

Normalt når du vil fuldtekstindeksere over to kolonner i kombination, opretter du et indeks over begge kolonner. Dette ville under alle omstændigheder være meget hurtigere. Det ville dog betyde, at du skal placere titler og beskrivelser i samme tabel. Dette er måske ikke sådan en vanskelighed:da fuldtekst kun virker på MyISAM-tabeller (og du typisk ikke vil have dine kanoniske data i MyISAM-tabeller), kan du beholde den endelige kopi af dine data i korrekt normaliserede InnoDB-tabeller med en ekstra MyISAM-tabel indeholdende kun strippet og opstammet søgelokkemad.

Hvis intet af det er godt... tja, jeg gætter på, at jeg ville gå tilbage til den UNIONing, du nævnte, kombineret med et filter på programniveau til at fjerne duplikerede id'er.



  1. konverter min sql-forespørgsel til queryexpression eller fetchxml i crm

  2. Sådan tager du kun backup af funktioner i Postgres

  3. Hvordan omarrangerer jeg MySQL-kolonner?

  4. Kontroller/ændre kompatibilitetsniveauet for en database i SQL Server (SSMS)