|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.10.2015, 19:08 | #1 |
Форумчанин
Регистрация: 18.02.2008
Сообщений: 198
|
SQL запрос очень долго выполняется
Доброе время!
Прошу помощи. Есть две таблицы вот не полная их структура Код:
Код:
select * from client нужно по каждому клиенту из полученного списка получить информацию из таблицы MAIN о дате его последнего визита (поле main.regdate) придумал вот такой запрос Код:
Помогите его оптимизировать |
07.10.2015, 19:38 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Как выглядят индексы базы? Проверял EXPLAIN PLAN?
I'm learning to live...
|
07.10.2015, 19:46 | #3 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
А refby откуда всплыло? О нем до того ни слова. И после того
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
08.10.2015, 09:43 | #4 |
Форумчанин
Регистрация: 18.02.2008
Сообщений: 198
|
нет не проверял. Я думаю это происходит из-за функции max()
Запрос построен таким образом что при выполнении основного запроса SELECT * FROM client для каждой записи выполняется подзапрос SELECT max(regdate), cid FROM main WHERE main.cid=client.id Ну как то так. не точно но принцип такой Только не пойму как это ускорить ну это не важно вообще-то refby взялся из таблицы main Вот все ее поля Код:
Это типа какой клиент кого привел... Но с этим проблем нет вообще... Последний раз редактировалось Stilet; 08.10.2015 в 10:53. |
08.10.2015, 09:52 | #5 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 08.10.2015 в 09:54. |
08.10.2015, 10:23 | #6 |
Форумчанин
Регистрация: 18.02.2008
Сообщений: 198
|
evg_m
Да ваш запрос самый быстрый. Сейчас придумал почти тоже самое, только вместо временной таблицы m я создал отдельный view с точно таким же запросом как у Вас. Однако моя конструкция выполняется за 960ms а Ваша за 740ms. Вот если бы еще можно было ускорить... Может в таблице client создать поле lastdate и записывать туда данные? Но тут придется делать какой-то алгоритм актуализации. Потому как клиент может записаться, в поле client.lastdate попадет значение, а клиент потом выпишется и не придет. Есть идеи? Пока пользуюсь Вашим вариантом. Спасибо большое |
08.10.2015, 10:47 | #7 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
попробуйте создать (если их нет, конечно)
индексы в таблице MAIN по полям индекс по cid индекс по regdate должно помочь. |
08.10.2015, 12:12 | #8 | |
Форумчанин
Регистрация: 18.02.2008
Сообщений: 198
|
Цитата:
Ув. STILET, Вы наверное это имели в веду в своем первом посте. Я не понял сразу. Спасибо evg_m, еще раз спасибо за поправленный запрос Тему можно закрывать |
|
08.10.2015, 12:25 | #9 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Думал ты индексы создал правильные.
I'm learning to live...
|
|
08.10.2015, 20:54 | #10 |
Пользователь
Регистрация: 07.05.2015
Сообщений: 12
|
Какое время выполнения запроса?
Какая именно СУБД? Где сервер (хостинг, локалхост) ЗЫ: уже много раз написали. реально зайди в структуру проверь индексы. Первая мысль об этом. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Очень долго выполняется curl + https | 7in | PHP | 2 | 17.07.2015 11:21 |
Долго выполняется MySQL запрос | SeRhy | SQL, базы данных | 2 | 13.06.2012 22:40 |
ADO-MS SQL Не выполняется запрос SELECT | Dj_SheLL | Помощь студентам | 10 | 23.11.2010 14:17 |
Очень долго стартует железо | Pirotexnik | Компьютерное железо | 0 | 29.09.2010 20:14 |
Не выполняется запрос в SQL | ivp88 | БД в Delphi | 5 | 17.01.2008 10:30 |