powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса / Таблицы
3 сообщений из 3, страница 1 из 1
Оптимизация запроса / Таблицы
    #39616811
21vek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет, прошу помощи в оптимизации запроса, индекса или таблицы в целом... Есть запрос

Код: sql
1.
2.
3.
4.
5.
SELECT DISTINCT i.`id`, i.`name`
FROM `p_items` as i, `p_cats_sync` as c 
WHERE c.`id` = i.`id` AND c.`cat_id` IN (109,152,153,156,157,158,161,163,166,140,266) AND c.`status` = 1 AND c.`p_status` = 1 
ORDER BY i.`status` DESC, i.`views` DESC 
LIMIT 40, 10;



EXPLAIN:
Код: sql
1.
2.
3.
id 	select_type 	table 	type 	possible_keys 	key 	key_len 	ref 	rows 	Extra 	
1 	SIMPLE 	c 	range 	PRIMARY,id 	PRIMARY 	4 	NULL	412 	Using where; Using index; Using temporary; Using f...
1 	SIMPLE 	i 	ref 	PRIMARY 	PRIMARY 	3 	c.id 	1 	



Таблицы:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE TABLE IF NOT EXISTS `p_items` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(200) NOT NULL,
  `status` tinyint(1) unsigned NOT NULL,
  `views` smallint(5) unsigned NOT NULL,
  PRIMARY KEY (`id`,`status`,`views`),
  UNIQUE KEY `status` (`status`,`views`,`id`),
  KEY `views` (`views`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2594 ;


CREATE TABLE IF NOT EXISTS `p_cats_sync` (
  `id` mediumint(8) unsigned NOT NULL COMMENT '',
  `cat_id` smallint(5) unsigned NOT NULL COMMENT '',
  `status` tinyint(1) unsigned NOT NULL COMMENT '',
  `p_status` tinyint(1) NOT NULL COMMENT '',
  PRIMARY KEY (`cat_id`,`status`,`p_status`,`id`),
  KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;




Запрос выполняется очень долго, даже на не очень большой БД (порядка 1400 записей) Пробовал просто запрос

Код: sql
1.
2.
3.
4.
5.
6.
EXPLAIN SELECT DISTINCT c.`id`
FROM `places_cats_sync` AS c
WHERE c.`cat_id`
IN ( 109, 152, 153, 156, 157, 158, 161, 163, 166, 140, 266 )
AND c.`status` =1
AND c.`p_status` =1


Выполняется быстро, хоть и с временной таблицей, убрать ее не получается :(
Код: sql
1.
1 	SIMPLE 	c 	range 	PRIMARY 	PRIMARY 	4 	NULL	412 	Using where; Using index; Using temporary



Прошу помощи в оптимизации, т.к. количество записей растет очень быстро
...
Рейтинг: 0 / 0
Оптимизация запроса / Таблицы
    #39617025
artas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
21vek,

а почему таблицы на разных движках ?
...
Рейтинг: 0 / 0
Оптимизация запроса / Таблицы
    #39617300
21vek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Потому, что с ними происходят разные действия, в p_items очень много update идет
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса / Таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]