powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Индексы в подзапросах
2 сообщений из 2, страница 1 из 1
Индексы в подзапросах
    #39241887
necoro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток всем.
Есть такой запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select `assist`.`name`, `no` as `DT_RowId`, `surname`, `crt_date`, `user_countries`.`name` as `country_name`, `user_cities`.`name` as `city_name`, `user_clients`.`name` as `client`, `policy_no`, 
`case_status`.`status_name`, `case_type`.`name` as `case_type`, IFNULL(GROUP_CONCAT(DISTINCT user_cards.name SEPARATOR ','),'Unset') as prov 
		from `assist` 
		left join `user_countries` on `assist`.`country` = `user_countries`.`id` 
		left join `user_cities` on `assist`.`city` = `user_cities`.`id` 
		left join `user_clients` on `assist`.`client_id` = `user_clients`.`code` 
		left join `case_status` on `assist`.`status` = `case_status`.`id` 
		left join `case_type` on `assist`.`type` = `case_type`.`id` 
		left join `case_providers` on `assist`.`no` = `case_providers`.`case_no` 
		left join `user_cards` on `case_providers`.`code` = `user_cards`.`code` 
		group by `assist`.`no` 
order by `assist`.`no` desc limit 25 offset 0


explain
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
+----+-------------+----------------+------------+--------+---------------+--------------+---------+----------------------------+------+----------+-------------+
| id | select_type | table          | partitions | type   | possible_keys | key          | key_len | ref                        | rows | filtered | Extra       |
+----+-------------+----------------+------------+--------+---------------+--------------+---------+----------------------------+------+----------+-------------+
|  1 | SIMPLE      | assist         | NULL       | index  | PRIMARY       | PRIMARY      | 4       | NULL                       |   18 |   100.00 | NULL        |
|  1 | SIMPLE      | user_countries | NULL       | eq_ref | PRIMARY       | PRIMARY      | 4       | assist.assist.country      |    1 |   100.00 | NULL        |
|  1 | SIMPLE      | user_cities    | NULL       | eq_ref | PRIMARY       | PRIMARY      | 4       | assist.assist.city         |    1 |   100.00 | NULL        |
|  1 | SIMPLE      | user_clients   | NULL       | eq_ref | code          | code         | 4       | assist.assist.client_id    |    1 |   100.00 | NULL        |
|  1 | SIMPLE      | case_status    | NULL       | eq_ref | PRIMARY       | PRIMARY      | 4       | assist.assist.status       |    1 |   100.00 | NULL        |
|  1 | SIMPLE      | case_type      | NULL       | eq_ref | PRIMARY       | PRIMARY      | 4       | assist.assist.type         |    1 |   100.00 | NULL        |
|  1 | SIMPLE      | case_providers | NULL       | ref    | unique_index  | unique_index | 4       | assist.assist.no           |    1 |   100.00 | Using index |
|  1 | SIMPLE      | user_cards     | NULL       | eq_ref | code          | code         | 4       | assist.case_providers.code |    1 |   100.00 | NULL        |
+----+-------------+----------------+------------+--------+---------------+--------------+---------+----------------------------+------+----------+-------------+



Для создания постраничного списка считаю общее количество строк таким образом:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 select count(*) as aggregate 
	from 
	(select `assist`.`name`, `no` as `DT_RowId`, `surname`, `crt_date`, `user_countries`.`name` as `country_name`, `user_cities`.`name` as `city_name`, `user_clients`.`name` as `client`, 
	`policy_no`, `case_status`.`status_name`, `case_type`.`name` as `case_type`, IFNULL(GROUP_CONCAT(DISTINCT user_cards.name SEPARATOR ',
'),'Unset') as prov 
		from `assist` 
		left join `user_countries` on `assist`.`country` = `user_countries`.`id` 
		left join `user_cities` on `assist`.`city` = `user_cities`.`id` 
		left join `user_clients` on `assist`.`client_id` = `user_clients`.`code` 
		left join `case_status` on `assist`.`status` = `case_status`.`id` 
		left join `case_type` on `assist`.`type` = `case_type`.`id` 
		left join `case_providers` on `assist`.`no` = `case_providers`.`case_no` 
		left join `user_cards` on `case_providers`.`code` = `user_cards`.`code` 
		group by `assist`.`no` order by `assist`.`no` desc) 
		count_row_table



и его explain
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
+----+-------------+----------------+------------+--------+---------------+--------------+---------+----------------------------+-------+----------+----------------+
| id | select_type | table          | partitions | type   | possible_keys | key          | key_len | ref                        | rows  | filtered | Extra          |
+----+-------------+----------------+------------+--------+---------------+--------------+---------+----------------------------+-------+----------+----------------+
|  1 | PRIMARY     | <derived2>     | NULL       | ALL    | NULL          | NULL         | NULL    | NULL                       | 53421 |   100.00 | NULL           |
|  2 | DERIVED     | assist         | NULL       | ALL    | PRIMARY       | NULL         | NULL    | NULL                       | 40308 |   100.00 | Using filesort |
|  2 | DERIVED     | user_countries | NULL       | eq_ref | PRIMARY       | PRIMARY      | 4       | assist.assist.country      |     1 |   100.00 | NULL           |
|  2 | DERIVED     | user_cities    | NULL       | eq_ref | PRIMARY       | PRIMARY      | 4       | assist.assist.city         |     1 |   100.00 | NULL           |
|  2 | DERIVED     | user_clients   | NULL       | eq_ref | code          | code         | 4       | assist.assist.client_id    |     1 |   100.00 | NULL           |
|  2 | DERIVED     | case_status    | NULL       | eq_ref | PRIMARY       | PRIMARY      | 4       | assist.assist.status       |     1 |   100.00 | NULL           |
|  2 | DERIVED     | case_type      | NULL       | eq_ref | PRIMARY       | PRIMARY      | 4       | assist.assist.type         |     1 |   100.00 | NULL           |
|  2 | DERIVED     | case_providers | NULL       | ref    | unique_index  | unique_index | 4       | assist.assist.no           |     1 |   100.00 | Using index    |
|  2 | DERIVED     | user_cards     | NULL       | eq_ref | code          | code         | 4       | assist.case_providers.code |     1 |   100.00 | NULL           |
+----+-------------+----------------+------------+--------+---------------+--------------+---------+----------------------------+-------+----------+----------------+


Собственно второй запрос и не устраивает, точнее время его выполнения >3s. Можно ли его как-то ускорить?
...
Рейтинг: 0 / 0
Индексы в подзапросах
    #39241889
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
SELECT count(distinct `assist`.`no`) FROM `assist`
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Индексы в подзапросах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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