Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Фильтр объявлений / 2 сообщений из 2, страница 1 из 1
26.02.2017, 19:25
    #39410442
nov17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтр объявлений
Здравствуйте, столкнулся с такой проблемой

Есть таблицы

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
--
-- Структура таблицы `cars`
--

CREATE TABLE IF NOT EXISTS `cars` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` mediumint(8) unsigned NOT NULL,
  `user_id` int(10) unsigned NOT NULL,
  `body_id` tinyint(3) unsigned NOT NULL,
  `first_image_id` int(10) unsigned NOT NULL,
  `car_classes_id` tinyint(3) unsigned NOT NULL,
  `fuel_id` tinyint(3) unsigned NOT NULL,
  `trns_id` tinyint(3) unsigned NOT NULL,
  `drive_id` tinyint(3) unsigned NOT NULL,
  `year_car` smallint(5) unsigned NOT NULL,
  `price` decimal(10,2) unsigned NOT NULL,
  `text` text NOT NULL,
  `status` enum('0','1') NOT NULL DEFAULT '0',
  `premium` enum('0','1') NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `parent_id` (`parent_id`),
  KEY `first_image_id` (`first_image_id`),
  KEY `status` (`status`),
  KEY `premium` (`premium`),
  KEY `user_id` (`user_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
--
-- Структура таблицы `lang_car_body` (кузов)
--

CREATE TABLE IF NOT EXISTS `lang_car_body` (
  `id_car_body` tinyint(3) unsigned NOT NULL,
  `id_lang` tinyint(3) unsigned NOT NULL,
  `title` varchar(50) NOT NULL,
  PRIMARY KEY (`id_car_body`,`id_lang`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
--
-- Структура таблицы `lang_drv` (привод)
--

CREATE TABLE IF NOT EXISTS `lang_drv` (
  `id_drv` tinyint(3) unsigned NOT NULL,
  `id_lang` tinyint(3) unsigned NOT NULL,
  `title` varchar(50) NOT NULL,
  PRIMARY KEY (`id_drv`,`id_lang`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
--
-- Структура таблицы `lang_trns` (Коробка передач)
--

CREATE TABLE IF NOT EXISTS `lang_trns` (
  `id_trns` tinyint(3) unsigned NOT NULL,
  `id_lang` tinyint(3) unsigned NOT NULL,
  `title` varchar(50) NOT NULL,
  PRIMARY KEY (`id_trns`,`id_lang`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
--
-- Структура таблицы `users`
--

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `sorname` varchar(100) NOT NULL,
  `logo` varchar(255) NOT NULL,
  `email` varchar(150) NOT NULL,
  `phone` varchar(20) NOT NULL,
  `pass` varchar(255) NOT NULL,
  `salt` varchar(255) NOT NULL,
  `vert` enum('0','1') NOT NULL DEFAULT '0',
  `vert_code` varchar(255) NOT NULL,
  `vert_pass_code` varchar(255) NOT NULL,
  `secret_key` varchar(150) NOT NULL,
  `ban` enum('0','1') NOT NULL DEFAULT '0',
  `role` enum('1','2','3') NOT NULL,
  `subs` enum('0','1') NOT NULL DEFAULT '0',
  `csrf_token_key` varchar(255) NOT NULL,
  `admission` enum('0','1') NOT NULL DEFAULT '0',
  `ip_adr` varchar(30) NOT NULL,
  `reg_date` date NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`,`phone`),
  KEY `vert` (`vert`),
  KEY `ban` (`ban`),
  KEY `role` (`role`),
  KEY `admission` (`admission`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
--
-- Структура таблицы `brands`
--

CREATE TABLE IF NOT EXISTS `brands` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `parent_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
  `level` tinyint(3) unsigned NOT NULL DEFAULT '1',
  `left_key` smallint(5) unsigned NOT NULL,
  `right_key` smallint(5) unsigned NOT NULL,
  `title` varchar(100) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `left_key` (`left_key`),
  UNIQUE KEY `right_key` (`right_key`),
  KEY `key_list` (`left_key`,`right_key`,`level`),
  KEY `level` (`level`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=126 ;



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
--
-- Структура таблицы `car_images`
--

CREATE TABLE IF NOT EXISTS `car_images` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `car_id` int(10) unsigned NOT NULL,
  `img` varchar(255) NOT NULL,
  `thumb_img` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `car_id` (`car_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=35 ;



Есть страница поиска с фильтрацией по разным характеристикам

Запрос

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
EXPLAIN EXTENDED SELECT c.id, b1.title modeltitle, b2.title brandtitle, car_images.thumb_img, c.price, lang_car_body.title bodytitle,
 
lang_trns.title trnstitle, lang_drv.title drvtitle, c.price_week, c.price_month, c.year_car, c.casco  FROM cars c 
INNER JOIN brands b1 ON c.parent_id = b1.id 
INNER JOIN brands b2 ON b2.left_key < b1.left_key AND b2.right_key > b1.right_key AND b2.level = 1 
INNER JOIN car_images ON car_images.id = c.first_image_id  
INNER JOIN lang_trns ON lang_trns.id_trns = c.trns_id
INNER JOIN lang_car_body ON lang_car_body.id_car_body = c.body_id
INNER JOIN lang_drv ON lang_drv.id_drv = c.drive_id 
INNER JOIN users ON c.user_id = users.id 
WHERE lang_trns.id_lang = "1" AND lang_car_body.id_lang = "1" AND lang_drv.id_lang = "1"  AND c.status = "1"  
ORDER BY c.id DESC LIMIT 0, 15



Выдает что идет сканирование всей таблицы cars (10150 записей). Просьба помочь, как правильно расставить индексы. Спасибо
...
Рейтинг: 0 / 0
28.02.2017, 03:33
    #39411323
Drema
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтр объявлений
nov17,

попробуйте
Код: sql
1.
... AND c.status  & 1 



а лучше вообще использовать tyniint.

а также фильтры
Код: sql
1.
lang_trns.id_lang = "1" AND lang_car_body.id_lang = "1" AND lang_drv.id_lang = "1"



перенести в выражения ON, раз уж у вас INNER JOIN. И по полям в ON сделать отдельные индексы.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Фильтр объявлений / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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