Hoi,
Laat ik beginnen met te melden dat de SQL code en db ontwerp niet van mijzelf zijn, maar van een collega van mij. Wij zijn nu al een tijdje bezig de database te optimaliseren, maar zoals met bijna alles moet je problemen oplossen waar ze ontstaan -- de queries.
Dit is een query die regelmatig voorkomt in onze slow-log file:
# Time: 030307 18:50:36
# User@Host: root[root] @ db1 [212.204.245.241]
# Query_time: 16 Lock_time: 0 Rows_sent: 6 Rows_examined: 18565
SELECT B.RecordNumber FROM books AS B , ytitle AS YT1 USE INDEX (WordBook) , ytitle AS YT2 USE INDEX (WordBook) , ytitle AS YT3 USE INDEX (WordBook) WHERE YT1.BookNumber = B.RecordNumber AND YT2.BookNumber = B.RecordNumber AND YT3.BookNumber = B.RecordNumber AND YT1.WordNumber = 1242 AND YT2.WordNumber = 3455 AND YT3.WordNumber = 1299 AND B.CountryNumber = 29 LIMIT 0,51;
Zo ziet de table books eruit:
en ytitle ziet er zo uit:
En dan is er nog een tabel met woorden, en hun id is gelijk aan ytitle.wordnumber.
Wat het woord precies is, weet ik niet.. maar het zou in de beschrijving van het boek kunnen zitten ofzo.
Mijn collega weet nog niet veel van joins (alsof dat nog niet duidelijk was), en deze db-structuur is zo complex dat ik ook niet veel ideeen heb.
Iemand van jullie? Die queries moeten sneller kunnen...
Laat ik beginnen met te melden dat de SQL code en db ontwerp niet van mijzelf zijn, maar van een collega van mij. Wij zijn nu al een tijdje bezig de database te optimaliseren, maar zoals met bijna alles moet je problemen oplossen waar ze ontstaan -- de queries.
Dit is een query die regelmatig voorkomt in onze slow-log file:
# Time: 030307 18:50:36
# User@Host: root[root] @ db1 [212.204.245.241]
# Query_time: 16 Lock_time: 0 Rows_sent: 6 Rows_examined: 18565
SELECT B.RecordNumber FROM books AS B , ytitle AS YT1 USE INDEX (WordBook) , ytitle AS YT2 USE INDEX (WordBook) , ytitle AS YT3 USE INDEX (WordBook) WHERE YT1.BookNumber = B.RecordNumber AND YT2.BookNumber = B.RecordNumber AND YT3.BookNumber = B.RecordNumber AND YT1.WordNumber = 1242 AND YT2.WordNumber = 3455 AND YT3.WordNumber = 1299 AND B.CountryNumber = 29 LIMIT 0,51;
Zo ziet de table books eruit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| +---------------+---------------------+------+-----+------------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------+---------------------+------+-----+------------+----------------+ | RecordNumber | int(11) | | PRI | NULL | auto_increment | | MemberNumber | int(11) | | MUL | 0 | | | BookNumber | varchar(20) | | MUL | | | | Author | varchar(60) | | | | | | Titel | text | | | | | | Description | varchar(100) | | | | | | DescripRest | text | | | | | | Price | bigint(20) unsigned | | | 0 | | | Keywords | varchar(100) | | | | | | DollarPrice | bigint(20) unsigned | | MUL | 0 | | | CountryNumber | tinyint(3) unsigned | | MUL | 0 | | | EntryDate | date | | MUL | 0000-00-00 | | | Status | char(1) | | MUL | | | | RecordType | tinyint(4) | | MUL | 0 | | | BookFlags | smallint(6) | | MUL | 0 | | | Year | smallint(6) | | MUL | 0 | | | FirstEdition | tinyint(4) | | MUL | 0 | | | DustWrapper | tinyint(4) | | MUL | 0 | | | Signed | tinyint(4) | | MUL | 0 | | | Cover | tinyint(4) | | MUL | 0 | | | SpecialField | tinyint(4) | | MUL | 0 | | +---------------+---------------------+------+-----+------------+----------------+ |
en ytitle ziet er zo uit:
code:
1
2
3
4
5
6
| +------------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+---------+------+-----+---------+-------+ | WordNumber | int(11) | | MUL | 0 | | | BookNumber | int(11) | | MUL | 0 | | +------------+---------+------+-----+---------+-------+ |
En dan is er nog een tabel met woorden, en hun id is gelijk aan ytitle.wordnumber.
Wat het woord precies is, weet ik niet.. maar het zou in de beschrijving van het boek kunnen zitten ofzo.
Mijn collega weet nog niet veel van joins (alsof dat nog niet duidelijk was), en deze db-structuur is zo complex dat ik ook niet veel ideeen heb.
Iemand van jullie? Die queries moeten sneller kunnen...