Topic: Reikia pagalbos optimizuojant užklausą su JOIN struktūra
bėda labai paprasta: turiu ganėtinai paprastą užklausą, tačiau ji vykdoma pernelyg ilgai. pirmiausia pradėsiu nuo lentelių.
Pagrindinė lentelė (36 515 įrašų):
CREATE TABLE IF NOT EXISTS `cms_module_aaproducts_products` (
`id` int(11) NOT NULL,
`nr` varchar(40) collate utf8_unicode_ci NOT NULL,
`name` varchar(200) collate utf8_unicode_ci NOT NULL,
`vnt` varchar(10) collate utf8_unicode_ci NOT NULL,
`category` varchar(200) collate utf8_unicode_ci default NULL,
`acode` varchar(40) collate utf8_unicode_ci NOT NULL,
`orignr` varchar(40) collate utf8_unicode_ci default NULL,
`price` float default NULL,
`stock` float NOT NULL default '0',
`brand` varchar(100) collate utf8_unicode_ci default NULL,
PRIMARY KEY (`id`),
KEY `nr` (`nr`),
KEY `orignr` (`orignr`),
KEY `acode` (`acode`),
KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
šalutinė lentelė (242 658 įrašų):
CREATE TABLE IF NOT EXISTS `cms_module_aaproducts_brands` (
`nr` varchar(25) collate utf8_unicode_ci NOT NULL,
`brand` varchar(20) collate utf8_unicode_ci NOT NULL,
`acode` varchar(40) collate utf8_unicode_ci NOT NULL,
`search` varchar(255) collate utf8_unicode_ci default NULL,
`modified` datetime NOT NULL,
`created` datetime NOT NULL,
KEY `nr` (`nr`),
KEY `acode` (`acode`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Pati užklausa:
SELECT t.*
FROM cms_module_aaproducts_products t
LEFT JOIN cms_module_aaproducts_brands b
ON b.acode=t.acode
WHERE (t.name LIKE '%VKM13132%'
OR t.acode LIKE '%VKM13132%'
OR b.nr LIKE '%VKM13132%')
AND t.stock>0
ORDER BY t.name ASC
LIMIT 10
Explain gražina tokią informaciją (deja, bet man tai nieko nesako):
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t index NULL name 767 NULL 36515 Using where
1 SIMPLE b ref acode acode 122 kainynas_autoai.t.acode 18 Using where
Ar matote čias kažkokių netikslumų, kurie galėtu būti lėto užklausos vykdymo priežąstis. Užklausa įvydoma per 7s.