Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];

Вниз

оптимизировать запрос   Найти похожие ветки 

 
ddddd ©   (2006-12-01 16:04) [0]

Здраствуйте. Помогите оптимизировать запрос. У меня он выполняется за минуту, а если делать FeatchAll, тогда надо ждать минут 5.
select m.id, m.fio from mainkop m join diagnos dia on m.id=dia.id where (m.id is not null ) and (dia.mkb is not null and  (m.dateout is null or (m.dateout is not null and m.dateout between "01.01.06  " and "30.11.06  ")   and dia.data>=m.dataopen and idd in (select max(d.idd) from diagnos d group by id))
Уверен, что это не такой сложный запрос, чтобы его так долго ждать.


 
Сергей М. ©   (2006-12-01 16:08) [1]

О какой оптимизации может идти речь, если инф-ции о структуре БД в вопросе кот наплакал ?)


 
Desdechado ©   (2006-12-01 17:38) [2]

(m.id is not null ) and (dia.mkb is not null and  (m.dateout is null or (m.dateout is not null
такого вида условия не используют индексов

m.dateout is not null and m.dateout between "01.01.06  " and "30.11.06  "
одно из условий лишнее

idd in (select max(d.idd) from diagnos d group by id))
СУБД не указана. Для IB это, например, вызывает выполнение поздапроса для каждой отобранной строки основного запроса.


 
ddddd ©   (2006-12-02 11:03) [3]


> Сергей М. ©   (01.12.06 16:08) [1]


Структура.
Таблица Mainkop
ID             integer
FIO           Varchar 250 ...
DataOpen   Date
DateOut     Date
Первичный ключ по полю ID

Таблица Diagnos
IDD Integer
ID Integer
data  date
MKB   varchar  100...
Первичный ключ по полю IDD
Внешний ключ - поле ID на поле ID первой таблицы

> idd in (select max(d.idd) from diagnos d group by id))
> СУБД не указана. Для IB это, например, вызывает выполнение
> поздапроса для каждой отобранной строки основного запроса.
>

СУБД - FB 1.5
В принципе я и предполагал, что основной тормоз в данном подзапросе, как то можно этого подзапроса избежать.
Поясню.
Главная таблица MainKop. Таблица diagnos связана с ней  по внешнему ключу, т.е. для каждой записи в первой таблице соответствует несколько записей второй таблицы. Вот из этих записей нужно вытащить последнюю.


 
Loginov Dmitry ©   (2006-12-02 12:16) [4]

> and idd in (select max(d.idd) from diagnos d group by id)
> )


Не знаю, прокатит в FB али нет, но попробуй запрос

select max(d.idd) from diagnos d group by id

сохранить в текстовом файле, например temp_diagnoz.sql
и положить этот файл в один каталог с базой данных


 
Loginov Dmitry ©   (2006-12-02 12:17) [5]

Далее в основном запросе делай:
select m.id, m.fio from .... "temp_diagnoz.sql" diag_tab
.......
and idd in diag_tab.1

Но врядли это в FB сработает. Это работает в BDE для табличек Парадокса.

Еще можно предварительно до выполнения запроса создать временно табличку в самой базе данных.


 
DrPass ©   (2006-12-02 12:42) [6]


> В принципе я и предполагал, что основной тормоз в данном
> подзапросе, как то можно этого подзапроса избежать.

Правильно думаешь. FB очень не любит подзапросов. Сделай хранимую процедуру, где сохраняй результат подзапроса во временную таблицу и цепляй ее через join


 
Desdechado ©   (2006-12-02 21:58) [7]

Если бы ты в подзапрос хотя бы where вставил вместо group, все было бы быстрее


 
jack128 ©   (2006-12-02 23:19) [8]

для начала ты реальный запрос написал бы.  А то в этом кол-во открывающихся скобок не соответствует закрывающимся..

Loginov Dmitry ©   (02.12.06 12:17) [5]
Это ты типа пытаешся угадать правельный ответ??


 
jack128 ©   (2006-12-02 23:27) [9]

ddddd ©   (01.12.06 16:04)
and idd in (select max

алиас проставь для поля.

ddddd ©   (01.12.06 16:04)
(m.id is not null )

если id - PK, то нафиг это?


 
Loginov Dmitry ©   (2006-12-03 08:30) [10]

> Это ты типа пытаешся угадать правельный ответ??


Точно!!


 
Sergey13 ©   (2006-12-04 08:30) [11]

> idd in (select max(d.idd) from diagnos d group by id)

idd = (select max(d.idd) from diagnos d group by id)

Max всегда вернет 1 значение.


 
Anatoly Podgoretsky ©   (2006-12-04 08:50) [12]

Если ИД честный, то это вернет ВСЕ записи.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.037 c
3-1160470589
jiny
2006-10-10 12:56
2006.12.24
Проблема с RemoveAllNodes в AdvStringGrid при повторном вызове


2-1165238459
Kostafey
2006-12-04 16:20
2006.12.24
Экспорт таблицы MS SQL Server


2-1165342682
Vladimir1984
2006-12-05 21:18
2006.12.24
RGB CMY Палитра GetRValue и тд...


2-1164978881
juice
2006-12-01 16:14
2006.12.24
Проблемы с кодировкой


15-1162106521
xayam
2006-10-29 10:22
2006.12.24
Вопрос для физиков





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский