![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
SELECT u.name, c.comp_name, c.news, s.sector_name, f.coef_group, f.coef_name, f.coef_hint, v.coef_id, v.acc_std, v.year, v.quarter, v.value FROM tab_comp AS c , tab_coef AS f, tab_users AS u, tab_val AS v, tab_sectors AS s WHERE c.id = v.comp_id AND v.comp_id = " . $comp_id . " AND f.id = v.coef_id AND u.user_id = v.user_id AND c.sector_id = s.id ORDER BY 8, 9";
Выполняется долго. И это при малом колчиестве данных.
c.comp_name, c.news, s.sector_name эти поля с одним значением. Думал сделать отдельным запросом с Distinct, но знакомый настоятельно учил, чтоб было всегда минимальное количество запросов. Я и ужимаю всегда в один. А тормозит из-за новостей c.news (text) для каждого строки выводятся. Это есть не хорошо. Помогите плиз...
Неактивен

А Вы можете положиться на то, что знакомый всегда прав?
Мы тут учим, что
простые и легко читаемые запросы часто лучше сложных, но «один» ![]()
Если Вы сами знаете, что news почти никогда не нужен, то выбирать его не стоит.
Стоит выбирать его тогда, когда он нужен. Если хотите играть с этим запросом, то
надо смотреть на explain: при таком количестве таблиц могли просто ключик про-
пустить какой-то.
Неактивен
Aqula написал:
Выполняется долго. И это при малом количестве данных.
В каждой табличке по отдельности может быть и не очень много данных, но Вы же выбираете из 5 таблиц сразу - при отсутствии индексов mysql будет вынужден перебрать n1*n2*n3*n4*n5 записей, где
n1 - количество строк в tab_comp,
n2 - количество строк в tab_coef,
n3 - количество строк в tab_users,
n4 - количество строк в tab_val,
n5 - количество строк в tab_sectors.
В плюс к explain'у запроса покажите пожалуйста
show create table на таблицы.
Отредактированно deadka (21.04.2011 16:53:55)
Неактивен
Спасибо за помощь. Я тут начал разделять запрос на 2. Стал чуть побыстрее работать. Сделал EXPLAIN
SQL-запрос: EXPLAIN SELECT u.name, f.coef_group, f.coef_name, f.coef_hint, v.coef_id, v.acc_std, v.year, v.quarter, v.value FROM dle_coef AS f, dle_users AS u, dle_val AS v, dle_sectors AS s WHERE v.comp_id = 8 AND f.id = v.coef_id AND u.user_id = v.user_id ORDER BY 5, 6;
Строки: 4
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE v ref id_comp,id_coef id_comp 3 const 1387 Using where; Using temporary; Using filesort
1 SIMPLE f eq_ref PRIMARY PRIMARY 2 b32203.v.coef_id 1
1 SIMPLE u eq_ref PRIMARY PRIMARY 3 b32203.v.user_id 1
1 SIMPLE s index NULL PRIMARY 1 NULL 25 Using index
Неактивен