|
|
|
|
|
для: dirol
(05.07.2011 в 15:12)
| | Да вы сами проверьте, ускоряются у вас эти запросы или нет? | |
|
|
|
|
|
|
|
для: cheops
(05.07.2011 в 14:48)
| | PRIMARY KEY (`id`),
KEY `cid` (`cid `, `sortirofka`,`fix`,`anons`,`perewod`,`fixup`,`fixcenter`)
а так правильнее? | |
|
|
|
|
|
|
|
для: dirol
(05.07.2011 в 13:34)
| | Скорее всего он быстрый, просто ресурсы MySQL оттянуты на действительно медленные запросы, они работают, потребляют процессорное время и память - это приводит к замедлению всех остальных запросов. Если бы их не было, скорее всего скорость однотабличных запросов возрасла.
В любом случае для ускорения этого запроса нужны другие индексы - многотабличные, у вас индекс используется только для cid IN (8,171) - все остальные сравнения не участвуют в индексах, а просто перелопачивают всю таблицу. Кроме этого time лучше перевести в UNIXSTAMP - занимать он будет в несколько раз меньше времени, а сравнение будет протекать в несколько раз быстрее. | |
|
|
|
|
|
|
|
для: cheops
(05.07.2011 в 13:27)
| | он тоже не быстрый
0.5542 сек. - [(SELECT id, cid, title, UNIX_TIMESTAMP(time) as formatted, hometext, bodytext, acomm, status, code, images FROM cms_news WHERE cid IN (1,10,11,12) AND status!='0' AND time <= NOW() ORDER BY time DESC LIMIT 3, 5)]
0.10686 сек. - [(SELECT id, cid, title, UNIX_TIMESTAMP(time) as formatted, hometext, bodytext, acomm, status, code, images FROM cms_news WHERE cid IN (1,10,11,12) AND status!='0' AND time <= NOW() ORDER BY time DESC LIMIT 0, 3)]
0.12245 сек. - [(SELECT id, cid, title, UNIX_TIMESTAMP(time) as formatted, hometext, bodytext, acomm, status, code, images FROM cms_news WHERE cid IN (2,13,14,15,16) AND status!='0' AND time <= NOW() ORDER BY time DESC LIMIT 3, 5)]
0.11618 сек. - [(SELECT id, cid, title, UNIX_TIMESTAMP(time) as formatted, hometext, bodytext, acomm, status, code, images FROM cms_news WHERE cid IN (2,13,14,15,16) AND status!='0' AND time <= NOW() ORDER BY time DESC LIMIT 0, 3)]
0.02667 сек. - [(SELECT id, cid, title, UNIX_TIMESTAMP(time) as formatted, hometext, bodytext, acomm, status, code, images FROM cms_news WHERE cid IN (6,91,101) AND status!='0' AND time <= NOW() ORDER BY time DESC LIMIT 3, 5)]
0.02664 сек. - [(SELECT id, cid, title, UNIX_TIMESTAMP(time) as formatted, hometext, bodytext, acomm, status, code, images FROM cms_news WHERE cid IN (6,91,101) AND status!='0' AND time <= NOW() ORDER BY time DESC LIMIT 0, 3)]
0.02086 сек. - [(SELECT id, cid, title, UNIX_TIMESTAMP(time) as formatted, hometext, bodytext, acomm, status, code, images FROM cms_news WHERE cid IN (3,111) AND status!='0' AND time <= NOW() ORDER BY time DESC LIMIT 3, 5)]
0.02062 сек. - [(SELECT id, cid, title, UNIX_TIMESTAMP(time) as formatted, hometext, bodytext, acomm, status, code, images FROM cms_news WHERE cid IN (3,111) AND status!='0' AND time <= NOW() ORDER BY time DESC LIMIT 0, 3)]
0.01316 сек. - [(SELECT id, cid, title, UNIX_TIMESTAMP(time) as formatted, hometext, bodytext, acomm, status, code, images FROM cms_news WHERE cid IN (5,181,191) AND status!='0' AND time <= NOW() ORDER BY time DESC LIMIT 3, 5)]
0.01539 сек. - [(SELECT id, cid, title, UNIX_TIMESTAMP(time) as formatted, hometext, bodytext, acomm, status, code, images FROM cms_news WHERE cid IN (5,181,191) AND status!='0' AND time <= NOW() ORDER BY time DESC LIMIT 0, 3)]
0.01903 сек. - [(SELECT id, cid, title, UNIX_TIMESTAMP(time) as formatted, hometext, bodytext, acomm, status, code, images FROM cms_news WHERE cid IN (4,161) AND status!='0' AND time <= NOW() ORDER BY time DESC LIMIT 3, 5)]
0.01773 сек. - [(SELECT id, cid, title, UNIX_TIMESTAMP(time) as formatted, hometext, bodytext, acomm, status, code, images FROM cms_news WHERE cid IN (4,161) AND status!='0' AND time <= NOW() ORDER BY time DESC LIMIT 0, 3)]
0.02358 сек. - [(SELECT id, cid, title, UNIX_TIMESTAMP(time) as formatted, hometext, bodytext, acomm, status, code, images FROM cms_news WHERE cid IN (7,201,141,151,17) AND status!='0' AND time <= NOW() ORDER BY time DESC LIMIT 3, 5)]
0.02407 сек. - [(SELECT id, cid, title, UNIX_TIMESTAMP(time) as formatted, hometext, bodytext, acomm, status, code, images FROM cms_news WHERE cid IN (7,201,141,151,17) AND status!='0' AND time <= NOW() ORDER BY time DESC LIMIT 0, 3)]
0.01037 сек. - [(SELECT id, cid, title, UNIX_TIMESTAMP(time) as formatted, hometext, bodytext, acomm, status, code, images FROM cms_news WHERE cid IN (8,171) AND status!='0' AND time <= NOW() ORDER BY time DESC LIMIT 3, 5)]
0.01005 сек. - [(SELECT id, cid, title, UNIX_TIMESTAMP(time) as formatted, hometext, bodytext, acomm, status, code, images FROM cms_news WHERE cid IN (8,171) AND status!='0' AND time <= NOW() ORDER BY time DESC LIMIT 0, 3)]
|
| |
|
|
|
|
|
|
|
для: dirol
(05.07.2011 в 13:01)
| | Погодите, это же однотабличный запрос, разве он медленно выполняется? Насколько я понял из отчета, проблема именно с многотабличными запросами? | |
|
|
|
|
|
|
|
для: cheops
(05.07.2011 в 12:43)
| | и звените а примером не покажите ? в запросе ON надо поставить?
щас запрос выполняется так
$result = $db->sql_query("(SELECT id, cid, title, UNIX_TIMESTAMP(time) as formatted, hometext, bodytext, acomm, status, code, images FROM ".$prefix."_news WHERE cid IN (".$id.") AND
status!='0' AND time <= NOW() ORDER BY time DESC LIMIT $ord, $lim)");
|
| |
|
|
|
|
|
|
|
для: dirol
(05.07.2011 в 12:27)
| | Попробуйте это условие передвинуть в ON, чтобы объединенные таблицы были поменьше. Дело в том, что WHERE применяется к записям когда уже сформирована промежуточная таблица. | |
|
|
|
|
|
|
|
для: cheops
(05.07.2011 в 12:23)
| | cid это категории новостей. вот выводятся новости из категорий 1,10,11,12 всего записей в категориях 62 | |
|
|
|
|
|
|
|
для: dirol
(05.07.2011 в 12:14)
| | >cid IN (1, 10,11,12)
cid - это что такое и как много записей условие отбирает, и как много записей оно отбрасывает? | |
|
|
|
|
|
|
|
для: dirol
(05.07.2011 в 12:14)
| | А cms_counter? Вообще таблицы уже довольно большие. Вам все новости в них нужны, может стоит их разделить на несколько? | |
|
|
| |
|