Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Using temporary; Using filesort при наличии индекса / 14 сообщений из 14, страница 1 из 1
16.10.2014, 19:20:39
    #38779052
Mermpheriulus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Using temporary; Using filesort при наличии индекса
Исходная инфо:
Версия 5.6.19-1

Таблица ord:
Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
CREATE TABLE `ord` (
  `ord_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `ord_level` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `ord_cons` int(10) unsigned NOT NULL DEFAULT '0',
  `ord_arch` int(10) unsigned NOT NULL DEFAULT '0',
  `stage_id` int(10) unsigned NOT NULL DEFAULT '0',
  `cust_id` mediumint(8) unsigned NOT NULL DEFAULT '1',
  `cont_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
  `cont_id_tech` mediumint(8) unsigned NOT NULL DEFAULT '0',
  `office_serv_id` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `ord_start_time` int(10) unsigned NOT NULL DEFAULT '0',
  `start_country_id` smallint(5) unsigned NOT NULL DEFAULT '0',
  `ord_start_addr` varchar(9) NOT NULL DEFAULT '',
  `ord_stop_time` int(10) unsigned NOT NULL DEFAULT '0',
  `stop_country_id` smallint(5) unsigned NOT NULL DEFAULT '0',
  `ord_stop_addr` varchar(9) NOT NULL DEFAULT '',
  `stop2_country_id` smallint(5) unsigned NOT NULL DEFAULT '0',
  `ord_stop2_addr` varchar(9) NOT NULL DEFAULT '',
  `ord_weight` float unsigned NOT NULL DEFAULT '0',
  `ord_weight_kom` float unsigned NOT NULL DEFAULT '0',
  `ord_volume` float unsigned NOT NULL DEFAULT '0',
  `ord_qplace` smallint(5) unsigned NOT NULL DEFAULT '0',
  `cons_rate` smallint(4) unsigned NOT NULL DEFAULT '0',
  `transit_id` smallint(5) unsigned NOT NULL DEFAULT '0',
  `product_id` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `tr_type_id` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `cust_exp_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
  `dox_id` smallint(5) unsigned NOT NULL DEFAULT '0',
  `cont_id_dox` mediumint(8) unsigned NOT NULL DEFAULT '0',
  `ord_date` int(10) unsigned NOT NULL DEFAULT '0',
  `ord_payments` double NOT NULL DEFAULT '0',
  `ord_trading_start` int(10) unsigned NOT NULL DEFAULT '0',
  `ord_ldm` float unsigned NOT NULL DEFAULT '0',
  `bc_id` smallint(5) unsigned NOT NULL DEFAULT '0',
  `loading_method_id` smallint(5) unsigned NOT NULL DEFAULT '0',
  `unloading_method_id` smallint(5) unsigned NOT NULL DEFAULT '0',
  `fc_id` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `service_id` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `ord_recent_client` tinyint(1) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`ord_id`),
  KEY `ord_cons` (`ord_cons`) USING BTREE,
  KEY `stage_id` (`stage_id`) USING BTREE,
  KEY `cust_id` (`cust_id`) USING BTREE,
  KEY `cont_id_tech` (`cont_id_tech`) USING BTREE,
  KEY `ord_start_time` (`ord_start_time`) USING BTREE,
  KEY `cont_id` (`cont_id`) USING BTREE,
  KEY `product_id` (`product_id`) USING BTREE,
  KEY `tr_type_id` (`tr_type_id`) USING BTREE,
  KEY `ord_level` (`ord_level`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=86394 DEFAULT CHARSET=cp1251;



Таблица ord_ext:
Код: 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.
CREATE TABLE `ord_ext` (
  `ord_id` int(10) unsigned NOT NULL,
  `ord_name` varchar(90) NOT NULL DEFAULT '',
  `country_id` smallint(5) unsigned NOT NULL DEFAULT '0',
  `ord_warn_ok` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `money_id` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `depot_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
  `ord_cust_req` varchar(60) NOT NULL DEFAULT '',
  `ord_cmr` varchar(63) NOT NULL DEFAULT '',
  `ord_cmr_date` date NOT NULL DEFAULT '0000-00-00',
  `ord_cmr_office` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `quality_id` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `quality_comment` varchar(200) NOT NULL DEFAULT '',
  `ord_start_addr2` varchar(750) NOT NULL DEFAULT '',
  `ord_start_cont` varchar(200) NOT NULL DEFAULT '',
  `ord_ex1` varchar(150) NOT NULL DEFAULT '',
  `ord_stop_addr2` varchar(750) NOT NULL DEFAULT '',
  `ord_stop2_addr2` varchar(750) NOT NULL DEFAULT '',
  `ord_special` varchar(300) NOT NULL DEFAULT '',
  `ord_loadnum` varchar(100) NOT NULL,
  `ord_comment` varchar(1000) NOT NULL DEFAULT '',
  `ord_apprice` varchar(100) NOT NULL,
  `ord_sender` varchar(200) NOT NULL,
  `ord_recipient` varchar(200) NOT NULL,
  PRIMARY KEY (`ord_id`),
  KEY `depot_id` (`depot_id`) USING BTREE,
  KEY `ord_id` (`ord_id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;



при выполнении запроса:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select SQL_CALC_FOUND_ROWS 
stage.stage_id stage_id,
stage_type_name, 
stage.ord_id ord_id,
ord_name,
cust.cust_name,
stage_must_date,
stage_have_date,
stage_comment,
stage_transp,
stage_driver_contacts 
FROM stage 
join stage_type using(stage_type_id) 
left join cust on(stage.cust_id=cust.cust_id) 
join ord on(stage.ord_id=ord.ord_id) 
join ord_ext on(stage.ord_id=ord_ext.ord_id) 
GROUP BY stage.stage_id;


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
+----+-------------+------------+--------+-------------------------------------------------------------------------------------+---------+---------+--------------------------+-------+---------------------------------+
| id | select_type | table      | type   | possible_keys                                                                       | key     | key_len | ref                      | rows  | Extra                           |
+----+-------------+------------+--------+-------------------------------------------------------------------------------------+---------+---------+--------------------------+-------+---------------------------------+
|  1 | SIMPLE      | ord_ext    | ALL    | PRIMARY,ord_id                                                                      | NULL    | NULL    | NULL                     | 60733 | Using temporary; Using filesort |
|  1 | SIMPLE      | stage      | ref    | PRIMARY,stage_type_id,ord_id,location,cust_id,stage_date,stage_inherited,stage_type | ord_id  | 4       | trol.ord_ext.ord_id      |     1 | NULL                            |
|  1 | SIMPLE      | stage_type | eq_ref | PRIMARY                                                                             | PRIMARY | 1       | trol.stage.stage_type_id |     1 | NULL                            |
|  1 | SIMPLE      | cust       | eq_ref | PRIMARY                                                                             | PRIMARY | 4       | trol.stage.cust_id       |     1 | Using where                     |
|  1 | SIMPLE      | ord        | eq_ref | PRIMARY                                                                             | PRIMARY | 4       | trol.ord_ext.ord_id      |     1 | Using index                     |
+----+-------------+------------+--------+-------------------------------------------------------------------------------------+---------+---------+--------------------------+-------+---------------------------------+


поиск по таблице ord_ext не использует индекс что приводит к медленному выполнению запроса, записи в таблицах ord и ord_ext имеют идентичные ID и отношение один к одному. В чем может быть причина ?
...
Рейтинг: 0 / 0
16.10.2014, 19:48:08
    #38779075
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Using temporary; Using filesort при наличии индекса
Mermpheriulus,

Код: sql
1.
2.
3.
4.
  
   PRIMARY KEY (`ord_id`),
  KEY `depot_id` (`depot_id`) USING BTREE,
  KEY `ord_id` (`ord_id`)



А зачем тебе ДВА индекса на ord_id ?
...
Рейтинг: 0 / 0
16.10.2014, 19:50:47
    #38779077
Mermpheriulus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Using temporary; Using filesort при наличии индекса
MasterZiv,
Для экспериментов добавил, перед тем как на форум постить, на результат его наличие или отсутствие не влияет
...
Рейтинг: 0 / 0
16.10.2014, 19:50:56
    #38779078
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Using temporary; Using filesort при наличии индекса
Mermpheriulus,

Для начала -- убери SQL_CALC_FOUND_ROWS .
...
Рейтинг: 0 / 0
16.10.2014, 19:52:53
    #38779080
Mermpheriulus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Using temporary; Using filesort при наличии индекса
MasterZiv,

как ни прискорбно но результат тот же
...
Рейтинг: 0 / 0
16.10.2014, 19:58:13
    #38779087
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Using temporary; Using filesort при наличии индекса
Оптимизатор считает, что выгоднее полный скан.
Force index - не помогает?
...
Рейтинг: 0 / 0
16.10.2014, 19:58:45
    #38779088
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Using temporary; Using filesort при наличии индекса
Mermpheriulusпоиск по таблице ord_ext не использует индекс что приводит к медленному выполнению запроса, записи в таблицах ord и ord_ext имеют идентичные ID и отношение один к одному.


Это ошибочный вывод.

Медленное выполнение запроса не потому, что не используется индекс.
У тебя нет критерия фильтрации записей (WHERE) и все таблицы, кроме этой, используют индексы, значит эта таблица -- просто
внешняя в плане, и там не может быть использован индекс, она сканируется вся целиком (сканирование индекса будет ещё более трудоёмким).
...
Рейтинг: 0 / 0
16.10.2014, 20:00:04
    #38779090
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Using temporary; Using filesort при наличии индекса
AkinaОптимизатор считает, что выгоднее полный скан.
Force index - не помогает?

Так а зачем его тут форсить ?
...
Рейтинг: 0 / 0
16.10.2014, 20:32:00
    #38779108
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Using temporary; Using filesort при наличии индекса
Ну и, как обычно, группировка превращает часть полей в секции SELECT в тыкву.
...
Рейтинг: 0 / 0
16.10.2014, 23:43:54
    #38779220
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Using temporary; Using filesort при наличии индекса
miksoftНу и, как обычно, группировка превращает часть полей в секции SELECT в тыкву.

ну об этом я и не говорю даже...
...
Рейтинг: 0 / 0
16.10.2014, 23:45:59
    #38779224
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Using temporary; Using filesort при наличии индекса
MasterZivзачем его тут форсить ?ТС хочет, чтобы индекс использовался, пусть попробует зафорсить... а вот зачем ему это нужно, я не знаю - чтобы увидеть, что хуже стало, наверное.
Хотя я полагаю, что и форсаж окажется бессилен.
...
Рейтинг: 0 / 0
17.10.2014, 00:04:42
    #38779240
Mermpheriulus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Using temporary; Using filesort при наличии индекса
записей в ord (и ord_ext соответственно) намного больше чем то что соответствует записям в таблице stage
Вот и было предположение что делать выборку всей таблицы не эффективно. Попробую с форсированным индексом, посмотрю что получится.
...
Рейтинг: 0 / 0
17.10.2014, 07:40:33
    #38779320
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Using temporary; Using filesort при наличии индекса
Mermpheriulusзаписей в ord (и ord_ext соответственно) намного больше чем то что соответствует записям в таблице stage
Вот и было предположение что делать выборку всей таблицы не эффективно. Попробую с форсированным индексом, посмотрю что получится.

если нет фильтров, то часто большая таблица всплывает в плане вверх.

форсировать индекс бесполезно.

также я бы предложил обратить внимание на общую бредовость запроса.
...
Рейтинг: 0 / 0
17.10.2014, 09:06:12
    #38779388
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Using temporary; Using filesort при наличии индекса
MasterZivесли нет фильтров, то часто большая таблица всплывает в плане вверх.
форсировать индекс бесполезно.
Угу. Когда ТС в этом убедится, попробуем предложить ему straight join...
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Using temporary; Using filesort при наличии индекса / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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