powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Очень долго выпоняется запрос
14 сообщений из 14, страница 1 из 1
Очень долго выпоняется запрос
    #38525629
Dmitriy001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно запрос . Выполняется на MySql 5.6 примерно полторы минуты, что никак не может устраивать. На Microsoft SQL этот же запрос выполняется за 3-4 сек. структура таблиц в прикрепленном файле.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT 
 people.UNICOD, people.SNILS, people.birthDate, people.SEX, ms.IDPAYER, ms.NUMBERPOLIS, ms.IDDOCUM, ms.SERIAPOLIS, 
 ms.max_Date, ms.eDatePolis, people.IDLPU AS IDSubject, people.timeModify
FROM people AS people
LEFT 
JOIN
 (
SELECT PP.ID, PP.IDLPU, max(PP.sDatePolis) AS max_date,PP.idPayer,PP.NUMBERPOLIS, PP.IDDOCUM, PP.SERIAPOLIS,  PP.eDatePolis
FROM people_polis AS PP,people AS P where PP.ID = P.UNICOD AND PP.IDLPU = P.IDLPU
GROUP BY ID, IDLPU) AS ms ON ms.ID = people.UNICOD AND ms.IDLPU = people.IDLPU


Найденные строки: 1 573 183 Предупреждения: 0 Длительность 2 queries: 00:01:29 (+ 4,875 sec. Network) */
таблица people. 1 574 000 записей, people_polis 2 290 000 записей.
Индексы IDLPU, ID присутствуют.

explain запроса


Код: plaintext
1.
2.
3.
4.
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	PRIMARY	people	ALL					1574650	
1	PRIMARY	<derived2>	ref	<auto_key0>	<auto_key0>	9	statistics.people.unicod,statistics.people.idlpu	10	
2	DERIVED	PP	ALL	id,idlpu				2289687	Using temporary; Using filesort
2	DERIVED	P	ref	idlpu,unicod	unicod	4	statistics.PP.id	2	Using where
...
Рейтинг: 0 / 0
Очень долго выпоняется запрос
    #38525654
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitriy001На Microsoft SQL этот же запрос выполняется за 3-4 сек.
MS SQL откажется выполнять этот запрос по SQL Error (8120).
...
Рейтинг: 0 / 0
Очень долго выпоняется запрос
    #38525669
Dmitriy001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эм... с чего бы ???
Немножко подправил запрос, убрал некоторые поля..
use [statistics];
SELECT distinct people.UNICOD, people.SNILS, people.birthDate, people.SEX,
ms.max_Date, people.IDLPU AS IDSubject, people.timeModify
FROM dbo.people AS people
LEFT
JOIN
(
SELECT PP.ID, PP.IDLPU, max(PP.sDatePolis) AS max_date
FROM dbo.people_polis AS PP,people AS P where PP.ID = P.UNICOD AND PP.IDLPU = P.IDLPU
GROUP BY pp.ID, pp.IDLPU) AS ms ON ms.ID = people.UNICOD AND ms.IDLPU = people.IDLPU
**************
UNICOD SNILS birthDate SEX max_Date IDSubject timeModify
8 080-114-077 11 1956-07-02 00:00:00.000 1 2013-02-07 00:00:00.000 100 2013-09-11 13:07:31.000
9 063-769-601 95 1953-07-29 00:00:00.000 2 2012-12-19 00:00:00.000 100 2014-01-10 01:15:38.000
11 066-962-116 92 1955-07-23 00:00:00.000 2 2012-09-24 00:00:00.000 100 2014-01-10 01:15:38.000
12 121-237-115 97 1917-08-07 00:00:00.000 2 2007-05-11 00:00:00.000 100 2012-04-26 10:25:34.000
13 078-808-601 09 1927-10-18 00:00:00.000 2 2007-01-04 00:00:00.000 100 2012-04-26 10:25:34.000
14 082-530-211 31 1986-10-17 00:00:00.000 2 2007-10-31 00:00:00.000 100 2014-01-10 01:15:38.000
15 080-165-832 51 1936-07-18 00:00:00.000 2 2012-12-19 00:00:00.000 100 2014-01-10 01:15:38.000
16 063-993-408 99 1951-02-28 00:00:00.000 2 2012-10-25 00:00:00.000 100 2014-01-10 01:15:38.000
17 120-962-474 46 1935-02-08 00:00:00.000 1 2012-11-22 00:00:00.000 100 2014-01-10 01:15:38.000
20 098-069-503 10 1946-05-17 00:00:00.000 2 2007-02-22 00:00:00.000 100 2014-01-10 01:15:38.000
21 099-169-640 31 1984-04-17 00:00:00.000 1 2012-05-14 00:00:00.000 100 2014-01-10 01:15:38.000
22 NULL 1988-09-11 00:00:00.000 1 2008-07-15 00:00:00.000 100 2012-04-26 10:25:34.000
***3 411 006 строк
...
Рейтинг: 0 / 0
Очень долго выпоняется запрос
    #38525671
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitriy001,

PP.ID уникальное поле?
Если да, то зачем от поля PP.sDatePolis брать максимум, ведь в группе будет всего одна запись?
Если нет, то, надеюсь, что вы осознаете, что поля PP.idPayer,PP.NUMBERPOLIS, PP.IDDOCUM, PP.SERIAPOLIS, PP.eDatePolis будут взяты из произвольной записи таблицы people_polis в пределах группы ?
...
Рейтинг: 0 / 0
Очень долго выпоняется запрос
    #38525686
Dmitriy001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftDmitriy001,

PP.ID уникальное поле?
Если да, то зачем от поля PP.sDatePolis брать максимум, ведь в группе будет всего одна запись?
Если нет, то, надеюсь, что вы осознаете, что поля PP.idPayer,PP.NUMBERPOLIS, PP.IDDOCUM, PP.SERIAPOLIS, PP.eDatePolis будут взяты из произвольной записи таблицы people_polis в пределах группы ?

PP.ID нет, не уникальное. В таблице people_polis могут могут быть несколько полисов, нужно найти самый свежий ив выдать его
...
авторPP.idPayer,PP.NUMBERPOLIS, PP.IDDOCUM, PP.SERIAPOLIS, PP.eDatePolis будут взяты из произвольной записи таблицы people_polis в пределах группы ?
Извините, я не так давно столкнулся с запросами,...если честно, то не понятно почему произвольный. На MS SQL писал запрос не я, он на самом деле довольно большой, есть еще куча join-ов. Там все написано в одной View, а MySql (View) не позволяет вложенные запросы, поэтому приходится переделывать все в обычный запрос, вот и возникла беда с временем выполнения.
...
Рейтинг: 0 / 0
Очень долго выпоняется запрос
    #38525687
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitriy001Эм... с чего бы ???С того, что Вы не запускали именно этот запрос на MS SQL, и вообще SQL пока не Ваш конёк - иначе бы Вы не задавали такого [censored] вопроса.
...
Рейтинг: 0 / 0
Очень долго выпоняется запрос
    #38525714
Dmitriy001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaDmitriy001Эм... с чего бы ???С того, что Вы не запускали именно этот запрос на MS SQL, и вообще SQL пока не Ваш конёк - иначе бы Вы не задавали такого [censored] вопроса.

Что ж Вы так грубо ??? )) То что не мой конек -не спорю. А вот, то, что именно этот запрос - извольте принтскрин глянуть (в файле приложенном)
...
Рейтинг: 0 / 0
Очень долго выпоняется запрос
    #38525718
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitriy001MySql (View) не позволяет вложенные запросыОформи их как вьюшки:
Код: 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.
mysql> create table test(id int auto_increment primary key, val int);
Query OK, 0 rows affected (1.40 sec)

mysql> insert into test(val) select 11 union select 13 union select 15 union select 17 union select 19;
Query OK, 5 rows affected (0.21 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> create view myview as  -- вьюв с подзапросом
    -> select t1.id, t1.val
    -> from test t1
    -> left join (
    -> select id from test t2 where val < 14
    -> union
    -> select id from test t2 where val > 18
    -> ) sq
    -> on t1.id=sq.id
    -> where sq.id is null;
-- ERROR 1349 (HY000): View's SELECT contains a subquery in the FROM clause
-- закомментировал, ибо косячит подсветка

mysql> create view sq as --  подзапрос как вьюв
    -> select id from test t2 where val < 14
    -> union
    -> select id from test t2 where val > 18
    -> ;
Query OK, 0 rows affected (0.08 sec)

mysql> create view myview as -- вьюв со вьювом-подзапросом
    -> select t1.id, t1.val
    -> from test t1
    -> left join sq
    -> on t1.id=sq.id
    -> where sq.id is null;
Query OK, 0 rows affected (0.13 sec)

mysql> select * from myview;
+----+------+
| id | val  |
+----+------+
|  3 |   15 |
|  4 |   17 |
+----+------+
2 rows in set (0.06 sec)

mysql>
...
Рейтинг: 0 / 0
Очень долго выпоняется запрос
    #38525727
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitriy001А вот, то, что именно этот запрос - извольте принтскрин глянуть (в файле приложенном)
Ну не стройте из себя дурака-то! То, что MS SQL даст ошибку, говорилось про запрос из начального поста. А тот запрос, скрин которого Вы сейчас приводите, на тот момент в теме ещё даже не появился.
...
Рейтинг: 0 / 0
Очень долго выпоняется запрос
    #38525734
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitriy001В таблице people_polis могут могут быть несколько полисов, нужно найти самый свежий ив выдать его FAQ: Выборка первой/последней записи в группах
...
Рейтинг: 0 / 0
Очень долго выпоняется запрос
    #38525774
Dmitriy001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Сначала и пытался делать методом объединения двух View. Но, говорят, View в MySQL не использует индексы, поэтому наверное и результат - 5 мин. 40 сек. Поэтому и пытаюсь сделать одним запросом.
explain
1 PRIMARY <derived2> ALL 10
2 DERIVED people ALL 1574650 Using temporary
2 DERIVED people_work ref id,idlpu id 4 statistics.people.unicod 3 Using where; Distinct
2 DERIVED people_sadr ref id,idlpu id 4 statistics.people.unicod 3 Using where; Distinct
2 DERIVED people_document ref id,idlpu id 4 statistics.people.unicod 3 Using where; Distinct
2 DERIVED people_polis ref id,idlpu id 4 statistics.people.unicod 4 Using where; Distinct
2 DERIVED <derived3> ref <auto_key0> <auto_key0> 9 statistics.people.unicod,statistics.people.idlpu 10 Distinct
3 DERIVED ss ALL 2289687 Using temporary; Using filesort



miksoft спасибо, щас буду "понимать" ;(
...
Рейтинг: 0 / 0
Очень долго выпоняется запрос
    #38525919
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitriy001говорят, View в MySQL не использует индексы
Вьюв - использует. А вот его результаты при использовании во внешнем запросе - нет. Тупо потому, что их самих, индексов то есть, нету...

Я думаю, Вы делаете типичную ошибку, описанную тут . Посему предлагаю всё похерить и начать с нуля - выкладывайте DDL и формулируйте постановку задачи.
...
Рейтинг: 0 / 0
Очень долго выпоняется запрос
    #38526091
Dmitriy001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaDmitriy001говорят, View в MySQL не использует индексы
Вьюв - использует. А вот его результаты при использовании во внешнем запросе - нет. Тупо потому, что их самих, индексов то есть, нету...

Я думаю, Вы делаете типичную ошибку, описанную тут . Посему предлагаю всё похерить и начать с нуля - выкладывайте DDL и формулируйте постановку задачи.

Чтож....не знаю что такое DDL, а постановка - сделать, чтоб заработал запрос на MYsql хотябы секунд за 10 ((

SELECT DISTINCT
people.UNICOD, people.SNILS, dbo.people_document.NAME, dbo.people_document.FAM, dbo.people_document.IM, dbo.people_document.OTCH,
dbo.people_document.TYPEPPL, dbo.people_document.BPLACE, people.birthDate, people.SEX, pp.IDPAYER, pp.NUMBERPOLIS, pp.IDDOCUM, pp.SERIAPOLIS,
pp.sDatePolis, pp.eDatePolis, dbo.people_document.IDDOCUMENT, dbo.people_document.NUMBER, dbo.people_document.SERIA, dbo.people_document.WHOOUT,
dbo.people_document.sDateDoc, dbo.people_sadr.IDGEO, dbo.people_sadr.SADDRESS, dbo.people_sadr.VILLAGE, dbo.people_sadr.OUTREGION,
dbo.people_sadr.OUTCOUNTRY, dbo.people_sadr.HOME, dbo.people_sadr.BODY, dbo.people_sadr.FLAT, dbo.people_sadr.CODOKATO, dbo.people_sadr.NAMEOBL,
dbo.people_sadr.NAMERAION, dbo.people_sadr.NAMESOV, dbo.people_sadr.NAMECITY, dbo.people_sadr.NAMESTREET, dbo.people_sadr.TYPECITY,
dbo.people_sadr.TYPESTREET, dbo.people_work.IDSTATUS, dbo.people_work.SWORK, people.IDLPU AS IDSubject, people.timeModify
FROM dbo.people AS people LEFT OUTER JOIN
dbo.people_work ON people.IDLPU = dbo.people_work.IDLPU AND people.UNICOD = dbo.people_work.ID AND
dbo.people_work.SDATE = '3000-01-01' LEFT OUTER JOIN
dbo.people_sadr ON people.IDLPU = dbo.people_sadr.IDLPU AND people.UNICOD = dbo.people_sadr.ID LEFT OUTER JOIN
dbo.people_document ON people.IDLPU = dbo.people_document.IDLPU AND people.UNICOD = dbo.people_document.ID LEFT OUTER JOIN
(SELECT ID, IDLPU, MAX(sDatePolis) AS max_date
FROM dbo.people_polis AS ss
GROUP BY ID, IDLPU) AS ms ON ms.ID = people.UNICOD AND ms.IDLPU = people.IDLPU LEFT OUTER JOIN
dbo.people_polis AS pp ON pp.ID = ms.ID AND pp.sDatePolis = ms.max_date AND pp.IDLPU = people.IDLPU
...
Рейтинг: 0 / 0
Очень долго выпоняется запрос
    #38526111
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не ходил, не читал... Это опять не постановка задачи, а твои попытки её решить.

И тегом кода пользуйся, да... текстовую лапшу читать очень неудобно.

PS. DDL - Data Definition Language. Мог бы и загуглить...
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Очень долго выпоняется запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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