mam w bazie (MyISAM) tabele zleceń (`tb_zlec`), adresów firm (`tb_firmadr`) i firm (`tb_firma`).
W `tb_zlec` jest m.in. pięć pól (wszystkie int) odwołujących się do `tb_firmadr` przez pole `firmadr_id` (int):
zleceniodawca (`zlec_firmadr_id_zleceniodawca`)
zaladunek (`zlec_firmadr_id_zaladunek`)
odbiorca (`zlec_firmadr_id_odbiorca`)
rozladunek (`zlec_firmadr_id_rozladunek`)
platnik (`zlec_firmadr_id_platnik`)
Powiazanie pomiędzy `tb_firmadr` a `tb_firma`: `firmadr_firma_id`<>`firma_id` (oba int)
W `tb_firma` są dwa pola: `firma_nazwa_krotka` i `firma_nazwa_dluga` (oba varchar(100))
Indexowanie założone na wszystkich wymienionych polach.
Ilość rekordów w bazach:
`tb_zlec` - 300tys rekordów (85MB)
`tb_firma` - 90tys rekordów (20MB)
`tb_firmadr` - 110tys rekordów (25MB)
Zrobiłem zapytanie "pokaż wszystkie zlecenia w których wystąpiła firma z początkiem nazwy długiej lub krótkiej 'ams%'":
SELECT z.zlec_id FROM (tb_firma AS fpla INNER JOIN tb_firmadr AS fapla ON fpla.firma_id = fapla.firmadr_firma_id) INNER JOIN ((tb_firma AS froz INNER JOIN tb_firmadr AS faroz ON froz.firma_id = faroz.firmadr_firma_id) INNER JOIN ((tb_firma AS fodb INNER JOIN tb_firmadr AS faodb ON fodb.firma_id = faodb.firmadr_firma_id) INNER JOIN ((tb_firma AS fzal INNER JOIN tb_firmadr AS fazal ON fzal.firma_id = fazal.firmadr_firma_id) INNER JOIN ((tb_firma AS fzle INNER JOIN tb_firmadr AS fazle ON fzle.firma_id = fazle.firmadr_firma_id) INNER JOIN tb_zlec AS z ON fazle.firmadr_id = z.zlec_firmadr_id_zleceniodawca) ON fazal.firmadr_id = z.zlec_firmadr_id_zaladunek) ON faodb.firmadr_id = z.zlec_firmadr_id_odbiorca) ON faroz.firmadr_id = z.zlec_firmadr_id_rozladunek) ON fapla.firmadr_id = z.zlec_firmadr_id_platnik WHERE fzle.firma_nazwa_dluga LIKE 'ams%' OR fzle.firma_nazwa_krotka LIKE 'ams%' OR fzal.firma_nazwa_dluga LIKE 'ams%' OR fzal.firma_nazwa_krotka LIKE 'ams%' OR fodb.firma_nazwa_dluga LIKE 'ams%' OR fodb.firma_nazwa_krotka LIKE 'ams%' OR froz.firma_nazwa_dluga LIKE 'ams%' OR froz.firma_nazwa_krotka LIKE 'ams%' OR fpla.firma_nazwa_dluga LIKE 'ams%' OR fpla.firma_nazwa_krotka LIKE 'ams%'
to zapytanie wykonuje się ok 6 sek
dla porównania zapytanie typu "pokaż wszystkie zlecenia, w których płatnik to firma 'ams%'" wykonuje się 0.2 sek
czy da się przyspieszyć to pierwsze?