Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день!
Имеется база данных вида:
CREATE TABLE `TABLE1` (
`c_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`from_id` bigint(6) DEFAULT NULL,
`to_id` bigint(6) DEFAULT NULL,
`s_v_t` varchar(255) DEFAULT NULL,
`s_v_d` varchar(255) DEFAULT NULL,
`s_n` varchar(255) DEFAULT NULL,
`s_t` varchar(255) DEFAULT NULL,
`s_d` varchar(255) DEFAULT NULL,
`s_v_t` varchar(255) DEFAULT NULL,
`g_v_d` varchar(255) DEFAULT NULL,
`g_t` varchar(255) DEFAULT NULL,
`g_d` varchar(255) DEFAULT NULL,
`m_t` varchar(255) DEFAULT NULL,
`m_d` varchar(255) DEFAULT NULL,
`m_n` varchar(255) DEFAULT NULL,
`f_o_e` tinyint(1) unsigned DEFAULT NULL,
`f_status` tinyint(1) unsigned NOT NULL DEFAULT '0',
`s_l_e` datetime DEFAULT NULL,
`g_l_e` datetime DEFAULT NULL,
`created` datetime DEFAULT NULL,
`deleted` datetime DEFAULT NULL,
`void` tinyint(1) unsigned DEFAULT '0',
PRIMARY KEY (`c_id`),
KEY `s_v_d` (`s_v_d`),
KEY `s_d` (`s_d`),
KEY `g_v_d` (`g_v_d`),
KEY `m_d` (`m_d`),
KEY `to_id` (`to_id`),
KEY `from_id` (`from_id`),
KEY `g_d` (`g_d`),
KEY `cv` (`void`,`f_status`)
) ENGINE=MyISAM AUTO_INCREMENT=269667 DEFAULT CHARSET=cp1251
SHOW CREATE TABLE `TABLE2`
CREATE TABLE `TABLE2` (
`id` int(6) unsigned NOT NULL AUTO_INCREMENT,
`c_id` int(10) unsigned DEFAULT NULL,
`m_id` char(10) DEFAULT NULL,
`places` int(3) unsigned NOT NULL DEFAULT '0',
`weight` float(7,2) unsigned NOT NULL DEFAULT '0.00',
`f_fin` tinyint(1) unsigned NOT NULL DEFAULT '0',
`void` tinyint(1) NOT NULL DEFAULT '0',
`c_void` int(3) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `iCarting` (`c_id`),
KEY `iVoid` (`void`)
) ENGINE=MyISAM AUTO_INCREMENT=380356 DEFAULT CHARSET=cp1251
Имеется запрос вида:
Запрос:
EXPLAIN SELECT * FROM `TABLE1` LEFT JOIN TABLE2 ON (TABLE1.`c_id` = TABLE2.`c_id`) WHERE TABLE1.`void` = 0 AND TABLE2.`void` = 0 AND TABLE1.`f_status` < 3 ORDER BY TABLE1.`c_id` DESC LIMIT 0, 20
База данных стоит в 2 местах, на домашнем компе и на хостинге.
Дома:
SELECT VERSION();
5.1.40-community
EXPLAIN SELECT * FROM `TABLE1` LEFT JOIN TABLE2 ON (TABLE1.`c_id` = TABLE2.`c_id`) WHERE TABLE1.`void` = 0 AND TABLE2.`void` = 0 AND TABLE1.`f_status` < 3 ORDER BY TABLE1.`c_id` DESC LIMIT 0, 20
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE TABLE1 index PRIMARY,cv PRIMARY 4 NULL 160 Using where
1 SIMPLE TABLE2 ref iCarting,iVoid iCarting 5 co23.TABLE1.c_id 1 Using where
На хосте
SELECT VERSION();
4.1.25-log
EXPLAIN SELECT * FROM `TABLE1` LEFT JOIN TABLE2 ON (TABLE1.`c_id` = TABLE2.`c_id`) WHERE TABLE1.`void` = 0 AND TABLE2.`void` = 0 AND TABLE1.`f_status` < 3 ORDER BY TABLE1.`c_id` DESC LIMIT 0, 20
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE Cartings ref PRIMARY,cv cv 2 const 51512 Using where; Using filesort
1 SIMPLE Carting_manifests ref iCarting,iVoid iCarting 5 wwwdimexcorpru01.Cartings.carting_id 1 Using where
Получаются 2 совершенно разных результата. Как возможно оптимизировать бд-ху, чтобы работало также как и на 5 версии.
И какие еще способы оптимизации здесь (не считая перепроектирования БД-хи) возможны?
Неактивен
Ну, я вижу, что EXPLAIN одинаковые, но на хостинге больше строк. Что Вас
смущает?
На будущее: или везде меняйте Cartings -> table1, или не делайте усложнение,
мысленно подставлять значения куда хуже, а оглашение названия таблиц не
ухудшает безопасность системы
Неактивен
>На будущее: или везде меняйте Cartings -> table1,
Не все углядел, извините.
Меня смущает то, что на хосте:
1) Using filesort
2) Идет переобор гораздо большего количества строк (150 дома vs 51512 на хосте), хотя база одна и та же фактически...
Отредактированно RizaR (31.03.2010 09:39:23)
Неактивен
Ну, filesort есть и там, и там. Просто дома меньше данных в самих табличках — оттуда
и разное количество строк для сортировки.
А сам explain, конечно, плохой, и лучше бы использовать индексы
Неактивен
Дома почти столько же данных в самих табличках, т.е где-то 51312 было бы.
Неактивен
А, все, вижу, он выбирает разные ключи для первой таблички.
Тогда только FORCE INDEX
Ну и прийдется, видимо, дома ставить 4.1, раз у него так сильно оптимизатор на
этом запросе отличается...
Неактивен