|
0 / 0 / 0
Регистрация: 09.05.2010
Сообщений: 233
|
||||||
Помогите ускорить выполнение запроса28.07.2010, 10:59. Показов 12258. Ответов 20
Метки нет (Все метки)
Помогите ускорить выполнение запроса:
Зато последующие разы выполняется моментально. Пробовал в QA прогонять, так там тоже если давно этот запрос не запускали то выполняется очень долго. Даже не знаю где копать. Помогите, уже совсем заплутал. Сервер размещается на двухпроцессорном (XEON x 2.4) сервере терминалов, испытания проводил когда юзеров почти нет.
0
|
||||||
| 28.07.2010, 10:59 | |
|
Ответы с готовыми решениями:
20
Как ускорить выполнение запросов в MS SQL? Можно ли ускорить выполнение пользовательской функции ускорить работу запроса |
|
alex1
|
|
| 28.07.2010, 11:36 | |
|
а если в Query Analizer выполнять этот запрос, то тоже долго первый раз?
|
|
|
0 / 0 / 1
Регистрация: 15.10.2007
Сообщений: 30
|
|
| 28.07.2010, 15:06 | |
|
План запроса какой? все соединения в индексы попадают? или где-нибудь table-scan проскакивает?
Посмотри еще statistics i/o по данному запросу, чтобы понять, по какой конкретно тблице тормозит... для более подробного анализа нужно видеть структуру таблиц вместе с индексами...
0
|
|
|
4 / 4 / 0
Регистрация: 15.10.2008
Сообщений: 282
|
|
| 28.07.2010, 16:51 | |
|
Oдин вoпрoс - a зaчем Вaм Group By в зaпрoсе?
0
|
|
|
0 / 0 / 0
Регистрация: 09.05.2010
Сообщений: 233
|
||||||
| 28.07.2010, 17:38 [ТС] | ||||||
|
alex1
Я же написал в самом начала о QA, да тоже тормозит первый раз. Kapusto Вот план, индексов там нет, потому как не соображу куда лучше их приделать. Видимо поэтому в плане одни сканы?
Насчет Group By мне уже подсказали что я 4 года был не прав, используя это для отсечения повторяющихся записей в запросе. Но Distinct разве не тоже самое делает что и Group By? Кто его знает как он там внутрях системы отрабатывает, иожет и вызывает как раз Group By
0
|
||||||
|
0 / 0 / 1
Регистрация: 15.10.2007
Сообщений: 30
|
|
| 28.07.2010, 17:50 | |
|
Ну навскидку тут может помочь индекс по Products.Customer_id
а также индексы по первичным ключам всех таблиц... Хотя странно, наверняка по таблицам PK определены, а по ним автоматически строятся индексы... покажи скрипт, по которому генерятся таблицы со всеми constraintами...
0
|
|
|
0 / 0 / 1
Регистрация: 15.10.2007
Сообщений: 30
|
|
| 28.07.2010, 17:51 | |
|
И еще... все join'ы имхо лучше переписать в обратном порядке, и начинать с Products...
0
|
|
|
0 / 0 / 0
Регистрация: 09.05.2010
Сообщений: 233
|
||||||
| 28.07.2010, 17:56 [ТС] | ||||||
|
Вот функции и таблицы:
0
|
||||||
|
4 / 4 / 0
Регистрация: 15.10.2008
Сообщений: 282
|
|
| 28.07.2010, 18:09 | |
|
1. Я не думaю чтo Group By и Distinct имеют oдинaкoвый aлгoритм.
2. SQL не сoздaёт ключей и индексoв при импoрте дaнных. 3. Дaже если ключи и индексы имеются в нaличии, тo пoсле импoртa бoльшoгo oбъёмa дaнных рекoмендуется oбнoвлять индексы (DBCC REINDEX).
0
|
|
|
0 / 0 / 1
Регистрация: 15.10.2007
Сообщений: 30
|
|
| 28.07.2010, 18:10 | |
|
Насчет импорта из Аксесса ничего сказать не могу... а вот индексы нужны, или хотя бы объявление первичных ключей... без этого ничего путного не получится...
0
|
|
|
0 / 0 / 0
Регистрация: 09.05.2010
Сообщений: 233
|
|||||||||||
| 28.07.2010, 18:22 [ТС] | |||||||||||
|
Забубухал индексов на всех сочленениях джойнов:
0
|
|||||||||||
|
4 / 4 / 0
Регистрация: 15.10.2008
Сообщений: 282
|
|
| 28.07.2010, 18:35 | |
|
SQL Server имеет свoй oптимизaтoр, кoтoрый и решaет чтo лучше испoльзoвaть - скaн или индекс. Чaще всегo, если в тaблице небoльшoе кoличествo зaписей, тo скaн ничуть не хуже индексa.
FYI: Вы мoжете зaстaвить SQL испoльзoвaть индекс (см. index hints).
0
|
|
|
1 / 1 / 0
Регистрация: 24.04.2010
Сообщений: 77
|
|
| 31.07.2010, 16:13 | |
|
очень интересная тема.
попробуйте сделать из этого запроса VIEW с опцией WITH COMPILE, тогда не надо будет тратить время на создание плана при каждом запуске запроса. И (не помню как, но кажется было такое, что) можно грузить данные в Cache при старте базы и держать их там безвылазно, тогда ВСЕ запросы (а не только вторые, третьи и т.д.) будут вылетать на раз. (вот только не помню как это делалось)
0
|
|
|
0 / 0 / 0
Регистрация: 09.05.2010
Сообщений: 233
|
|
| 01.08.2010, 09:48 [ТС] | |
|
resu+, где эту опциу выставить можно?
0
|
|
|
1 / 1 / 0
Регистрация: 24.04.2010
Сообщений: 77
|
|||||||||||
| 02.08.2010, 04:11 | |||||||||||
|
Во первых про WITH COMPILE – это я ошибся - прошу меня извинить (перепутал), однако я уверен (хотя и не нашел пока как это сделать), что VIEW и в MS SQL Server можно компилировать (наверняка есть какая ни будь 'sp_...')
Если очень нужна компиляция, то можно и с CREATE PROCEDURE сделать. Теперь как засунуть данные в CACHE: я опять таки уверен, что CACHE’у можно объяснить, что определенные данные надо держать постоянно, т.е. выталкивать по мере необходимости все кроме них (но я пока этот способ тоже не нашел) Есть вариант с запланированной задачей, он мне вообще то не нравится, но я ничего лучшего пока не нашел (если речь идет о CACHE, т.к. вариант получше – есть см. далее). Можно создать запланированную задачу с SQL-Запросом (надо запускать SQL-AGENT вместе с SQL Server) и выполнять ее каждые n минут (зависит от объема данных, загрузки сервера и т.д. это надо подобрать самому). тогда данные (по крайней мере какая то их часть – это зависит от фактора случайности + см. Предыдущие скобки) на момент поступления запроса будут браться из CACHE Каждые n минут SQL-Agent будет выполнять этот же запрос и подгружать в CACHE все те же данные. Конечно эта муть имеет много минусов. На пример: этот вариант хорош (с натяжкой) только если запрос никак не видоизменяется: т.е. для SQL Server 2 Запроса поступившие один за другим
Лучшее (на мой взгляд) решение: Если же запрос сам по себе большой (обрабатываются долго соединяя многих таблиц), то можно его скинуть в Процедуру, которая заносит все данные из соединяемых таблиц в одну – временную, вызывать эту процедурку по тригерам (или/ и даже через ту же запланированную задачу – это зависит от конкретной задачи) и брать Ваши данные из ЭТОЙ таблицы. Это и быстрее и проще. Я делаю в общем то где то именно так и Вам Советую. Если же кто то разберется с CACHE или компиляцией раньше меня, буду рад узнать об этом С Уважением.
0
|
|||||||||||
|
0 / 0 / 2
Регистрация: 24.06.2010
Сообщений: 174
|
|
| 10.08.2010, 12:37 | |
|
Вот это яркий и образцово-показатедьный пример, как не надо проетировать базы данных. И как бы вы не анализировали запрос, вы проблемы не решите, пока не денормализуете БД.
Правило номер 1: Абсолютно нормализованная БД никогда не будет работать. Правило номер 2: Запрос из одной большой таблицы идет намного быстрее, чем из двух маленьких. Если ты перестоишь свою базу в соответсвии с этими правилами, запросы у тебя будут летать. Забудь все то, чему тебя учили про нормализацию и вместо ID поставь везде текстовые значения полей (не CustomerID а CustomerName). Я через всю эту фигню уже прошел. Сам подумай: чтобы получить какое-то одно значение из справочника, например, покупателей, тебе надо лопатить тысячи записей в этом справочнике.
0
|
|
|
Romkin_I
|
|
| 10.08.2010, 13:22 | |
|
>Вот это яркий и образцово-показатедьный пример, как не надо проетировать базы данных.
Кошмарики. Нормальная БД, все в полном порядке. >И как бы вы не анализировали запрос, вы проблемы не решите, пока не денормализуете БД. >Правило номер 1: >Абсолютно нормализованная БД никогда не будет работать. Чушь собачья. Что такое 'Абсолютно нормализованная'? в первой форме? в НФБК? в 33-й? Да, в реальности БД часто денормализуют. Но именно денормализуют уже нормализованную БД. В чем разница? Денормализация фактически разделяет БД на нормализованную и денормализованную часть. Методики описаны, и предназначены они для повышения скорости обработки данных в узких местах, не более. Но целостность данных при этом полностью отслеживается. >Правило номер 2: >Запрос из одной большой таблицы идет намного быстрее, чем из двух маленьких. Хм... Давайте всю базу записывать в одну таблицу! Все летать будет!!! Кстати, что-то я такого правила не замечал ![]() >Если ты перестоишь свою базу в соответсвии с этими правилами, запросы у тебя будут летать. Угу. А у пользователей и программистов волосы будут стоять дыбом. Особенно удобно контролировать непротиворечивость данных... >Забудь все то, чему тебя учили про нормализацию и вместо ID поставь везде текстовые значения полей (не CustomerID а CustomerName). Радикально. Если бы не 'вместо' а 'вместе', то еще можно было бы согласиться, а так - не дай бог! Все-таки нормальные формы не от балды придумали... >Я через всю эту фигню уже прошел. Э! Судя по всему, ты только в начале пути ) Скоро ляпнешься, и начнешь читать книги по проектированию БД. Хорошие книги.>Сам подумай: чтобы получить какое-то одно значение из справочника, например, покупателей, тебе надо лопатить тысячи записей в этом справочнике. Индексы для этого есть, и если не ошибаюсь, MSSQL очень хорош в джойнах, план запроса подбирается очень хорошо. |
|
|
0 / 0 / 0
Регистрация: 09.05.2010
Сообщений: 233
|
|
| 10.08.2010, 13:24 [ТС] | |
|
tsttom, готовься, щас тебя тапинают!
![]() Сегодня не первое апреля вроде бы, ты себя как чувствуешь?
0
|
|
|
0 / 0 / 2
Регистрация: 24.06.2010
Сообщений: 174
|
|
| 10.08.2010, 16:52 | |
|
спасибо за участие, Pantalone
я знаю, что запинают. У нас же все спецы великие. А как до дела доходит - так на выходе только что-нибудь типа 1С
0
|
|
|
0 / 0 / 2
Регистрация: 24.06.2010
Сообщений: 174
|
|
| 10.08.2010, 17:02 | |
|
да еще, Pantalone
1. Замени в таблицах Тип nvarchar на char, т.к. при запросах nvarchar тянет за собой всю длину, даже если он пустой. 2. Для убирания повторяющихся строк используй UNION (но в таких случаях всегда есть опасность и потерять данные)
0
|
|
| 10.08.2010, 17:02 | |
|
Помогаю со студенческими работами здесь
20
Параллельное выполнение запроса Автоматическое выполнение запроса Выполнение запроса на основе предыдущего Ускорить выполнение запроса Ускорить выполнение запроса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|