Witam
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%'":
  1. SELECT
  2. z.zlec_id
  3. FROM
  4. (tb_firma AS fpla INNER JOIN tb_firmadr AS fapla
  5. ON fpla.firma_id = fapla.firmadr_firma_id)
  6. INNER JOIN ((tb_firma AS froz INNER JOIN tb_firmadr AS faroz
  7. ON froz.firma_id = faroz.firmadr_firma_id)
  8. INNER JOIN ((tb_firma AS fodb INNER JOIN tb_firmadr AS faodb
  9. ON fodb.firma_id = faodb.firmadr_firma_id)
  10. INNER JOIN ((tb_firma AS fzal INNER JOIN tb_firmadr AS fazal
  11. ON fzal.firma_id = fazal.firmadr_firma_id)
  12. INNER JOIN ((tb_firma AS fzle INNER JOIN tb_firmadr AS fazle
  13. ON fzle.firma_id = fazle.firmadr_firma_id)
  14. INNER JOIN tb_zlec AS z
  15. ON fazle.firmadr_id = z.zlec_firmadr_id_zleceniodawca)
  16. ON fazal.firmadr_id = z.zlec_firmadr_id_zaladunek)
  17. ON faodb.firmadr_id = z.zlec_firmadr_id_odbiorca)
  18. ON faroz.firmadr_id = z.zlec_firmadr_id_rozladunek)
  19. ON fapla.firmadr_id = z.zlec_firmadr_id_platnik
  20. WHERE
  21. fzle.firma_nazwa_dluga LIKE 'ams%' OR
  22. fzle.firma_nazwa_krotka LIKE 'ams%' OR
  23. fzal.firma_nazwa_dluga LIKE 'ams%' OR
  24. fzal.firma_nazwa_krotka LIKE 'ams%' OR
  25. fodb.firma_nazwa_dluga LIKE 'ams%' OR
  26. fodb.firma_nazwa_krotka LIKE 'ams%' OR
  27. froz.firma_nazwa_dluga LIKE 'ams%' OR
  28. froz.firma_nazwa_krotka LIKE 'ams%' OR
  29. fpla.firma_nazwa_dluga LIKE 'ams%' OR
  30. 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?