Задавайте вопросы, мы ответим
Вы не зашли.
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
Неактивен