Mijn slow-query-log staat vol met 1 bepaalde query, en nu ben ik niet zo'n SQL guru maar ik vraag me af of deze te optimizen is. Dit is de query:
SELECT B.RecordNumber FROM books AS B, yauthor as YA1 USE INDEX (WordBook), ytitle AS YT1 USE INDEX (WordBook), ytitle AS YT2 USE INDEX (WordBook) WHERE YA1.BookNumber = B.RecordNumber AND YA1.WordNumber = 249 AND YT1.BookNumber = B.RecordNumber AND YT2.BookNumber = B.RecordNumber AND YT1.WordNumber = 4985 AND YT2.WordNumber = 29534 AND (B.Cover = 1) LIMIT 0,51;
books is een tabel met zo'n 2 miljoen boeken erin, met omschrijvingen e.d..
ytitle is de titel van het boek.
De query zoekt dus alle (book) records op van een bepaalde auteur, waar sleutel woorden in voorkomen die ingevoerd zijn door de user, in dit geval woorden 249, 29534 en 4985.
Dit soort queries duren gemiddeld zo'n 15 seconden, wat natuurlijk veels te lang is. Enig idee hoe dat sneller kan?
[edit: oops, yauthor is geen tabel met auteurs info, maar een tabel met WordNumbers en BookNumbers]
SELECT B.RecordNumber FROM books AS B, yauthor as YA1 USE INDEX (WordBook), ytitle AS YT1 USE INDEX (WordBook), ytitle AS YT2 USE INDEX (WordBook) WHERE YA1.BookNumber = B.RecordNumber AND YA1.WordNumber = 249 AND YT1.BookNumber = B.RecordNumber AND YT2.BookNumber = B.RecordNumber AND YT1.WordNumber = 4985 AND YT2.WordNumber = 29534 AND (B.Cover = 1) LIMIT 0,51;
books is een tabel met zo'n 2 miljoen boeken erin, met omschrijvingen e.d..
ytitle is de titel van het boek.
De query zoekt dus alle (book) records op van een bepaalde auteur, waar sleutel woorden in voorkomen die ingevoerd zijn door de user, in dit geval woorden 249, 29534 en 4985.
Dit soort queries duren gemiddeld zo'n 15 seconden, wat natuurlijk veels te lang is. Enig idee hoe dat sneller kan?
[edit: oops, yauthor is geen tabel met auteurs info, maar een tabel met WordNumbers en BookNumbers]