Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Есть некая база на аксессе содержащая большую таблицу и несколько мелких Размер таблицы 36 столбцов Строк от 300 000 до 1 500 000 Генерации этой таблицы предшествует очень долгая прелюдия поэтому в принципе на генерацию можно потратить сколь угодно времени, дальше поясню к чему это. Далее из Excel VBA формирует через дао запрос код примерно такой Код: plaintext 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. дальше работаю с рекордсетом в общем нужно существенно увеличить скорость выполнения такого запроса. У меня он выполняется от 1,6 сек до 5,4 сек. (конфа обычная, XP, core2duo 2,2*2, 1гиг) база локальная в сутки нужно выполнять этот запрос около 40 тыс раз и более соответственно с разными критериями. В сутки выполнение не укладывается. Думал над вариантом создавать в прелюдии (как я говорил её продолжительность не имеет значения) 40 тыс текстовиков в папку где каждый файлик это результат выполнения запроса по критерию и читать их с винта. Но чую не та степь. Гуглить не помогает все статьи которые удалось найти не могут дать ответ на этот вопрос "Как ускорить" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 10:18 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Вопрощатель в сутки нужно выполнять этот запрос около 40 тыс раз и более соответственно с разными критериями. В сутках 86400 секунд, обработка одного запроса примерно за 2 секунды. Даа... Вопрощатель У меня он выполняется от 1,6 сек до 5,4 сек. (конфа обычная, XP, core2duo 2,2*2, 1гиг) база локальная Выполняется за это время запрос? или запрос+обработка запроса? Если второе, попробуйте оптимизировать обработку запроса. Или (если реализуемо для БД) несколько запросов объедините в один, а потом результат запроса разделите на части для обработки. Попробуйте "убить" лишние процессы в системе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 10:39 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Структуру таблицы и индексов в студию. А вообще-то это чисто вопрос для раздела "Использование СУБД", скорее всего для ветки MSAccess, так как там нет отдельной ветки по JET, потому что оптимизировать на стороне VB тут нечего. Отдайте им а) структуру таблицы б) структуру индексов в) запрос в чистом виде (собранный) Возможно будут предложения по оптимизаци выборки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 10:40 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Не пробовали StrSQL сразу задать одним выражением? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 10:47 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
> Автор: Вопрощатель А почему DAO а не ADO? Почему не используются параметры? Пример из МСДН для параметризированных запросов: Код: plaintext 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. 46. 47. 48. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 10:49 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
.Михаил. Выполняется за это время запрос? или запрос+обработка запроса? Если второе, попробуйте оптимизировать обработку запроса. Или (если реализуемо для БД) несколько запросов объедините в один, а потом результат запроса разделите на части для обработки. Попробуйте "убить" лишние процессы в системе. без обработки, только запрос лишних процессов нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 10:59 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Shocker.ProСтруктуру таблицы и индексов в студию. А вообще-то это чисто вопрос для раздела "Использование СУБД", скорее всего для ветки MSAccess, так как там нет отдельной ветки по JET, потому что оптимизировать на стороне VB тут нечего. Отдайте им а) структуру таблицы б) структуру индексов в) запрос в чистом виде (собранный) Возможно будут предложения по оптимизаци выборки. спасибо я думаю что и на стороне JET тоже мало, что можно оптимизировать я думал подойти к вопросу иначе или подойти иначе к параметрам отчета ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 11:32 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Hugo121, а на что это повлияет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 11:33 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос > Автор: Вопрощатель А почему DAO а не ADO? Почему не используются параметры? Как обстоят дела с индексацией данных? В вопросах общения с Access я не специалист. Чем АДО привлекательнее? Под индексацией понимается ключ данных,. т.е. речь о сокращении размера таблицы созданием доп. индексов объединяющих ключи?? Ну у меня в таблице есть признак дерева товаров Gr20, GR21, Gr22 - 3 столбца которые можно сократить до 1 индекса и создать ссылку в другой таблице а потом ссылаться на этот ключ. Но это 2 запроса. 1 выборка , 2 join. Даст ли это существенный прирост? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 11:40 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос > Автор: Вопрощатель А почему DAO а не ADO? Почему не используются параметры? в соседней ветке White Owl Параметры нужны только при использовании повторяющихся запросов. В этом случае можно подготовить запрос, создать для него набор параметров а потом изменяя параметры запускать. По идее это будет работать быстрее чем запуск отдельных похожих запросов на каждый из которых сервер базы данных должен будет запускать парсер sql команды (подготавливать то есть). разве в моем случае парсер запускается? У меня же локальная СУБД. Или это не имеет значения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 11:49 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Не знаю, как другие, а я вот не нашел в полях селекта групповых операциий, которые требовали бы Group by. Как минимум можно было бы избавиться от Group by и вместо having сделать where. Jah loves you. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 11:51 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Вопрощательразве в моем случаеВ любом случае выйгрыш от этого ничтожен по сравнению с временем выполнения любого запроса. Параметры используют для удобства, а не облегчения жизни парсеру. Jah loves you. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 11:54 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Antonariy, *BRAVO* и действительно, в HAVING нет групповых операций, все условия в WHERE будут, наверное работать быстрее, а вмето в GROUP BY можно использовать DISTINCTROW, если там действительно повторяющиеся строки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 11:55 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
AntonariyНе знаю, как другие, а я вот не нашел в полях селекта групповых операциий, которые требовали бы Group by. Как минимум можно было бы избавиться от Group by и вместо having сделать where. заготовку для запроса я составлял по SQL интерпретации Access. Поэтому незнаю нужен group by или нет. Сейчас попробую заменить указанные Вами записи и сделать пару прогонов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 11:56 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
ВопрощательПод индексацией понимается ключ данных,. т.е. речь о сокращении размера таблицы созданием доп. индексов объединяющих ключи?? Ну у меня в таблице есть признак дерева товаров Gr20, GR21, Gr22 - 3 столбца которые можно сократить до 1 индекса и создать ссылку в другой таблице а потом ссылаться на этот ключ. Но это 2 запроса. 1 выборка , 2 join. Даст ли это существенный прирост? Нет, речь не о том, то, что вы описали, называется нормализацией. Что касается индексации - на все поля, которые идут в условиях отбора, необходимо создать индексы (для полей группировки тоже, но, надеюсь, вы откажетесь от группировки и перенесете их в WHERE). Индексы увеличат, а не уменьшат размер базы, замедлят запись, зато при таком размере таблицы - на порядки ускорят выборку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 12:00 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Вопрощатель я думаю что и на стороне JET тоже мало, что можно оптимизировать Вот это вы зря. Правда, пока нет структуры таблицы и индексов, обсуждать это бессмысленно. Вопрощателья думал подойти к вопросу иначе или подойти иначе к параметрам отчета Возможно, но по формированию отчета вы не дали вообще никаких данных, поэтому тоже помочь не можем пока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 12:04 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Кстати, насчет DAO и ADO, в принципе DAO предпочтительней, с аксессом оно работает быстрее, хотя у вас не тот случай, когда это будет сильно заметно. Jah loves you. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 12:05 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Shocker.ProВопрощательПод индексацией понимается ключ данных,. т.е. речь о сокращении размера таблицы созданием доп. индексов объединяющих ключи?? Ну у меня в таблице есть признак дерева товаров Gr20, GR21, Gr22 - 3 столбца которые можно сократить до 1 индекса и создать ссылку в другой таблице а потом ссылаться на этот ключ. Но это 2 запроса. 1 выборка , 2 join. Даст ли это существенный прирост? Нет, речь не о том, то, что вы описали, называется нормализацией. Что касается индексации - на все поля, которые идут в условиях отбора, необходимо создать индексы (для полей группировки тоже, но, надеюсь, вы откажетесь от группировки и перенесете их в WHERE). Индексы увеличат, а не уменьшат размер базы, замедлят запись, зато при таком размере таблицы - на порядки ускорят выборку. Нашел хелп по индексам но я так понял за 5 минут не раскурю Сначала попробую Ваши варианты с заменой where ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 12:06 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Сначала раскройте маленькую тайну, [2-1 итоговый рейтинг] это таблица или представление? Jah loves you. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 12:08 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
AntonariyСначала раскройте маленькую тайну, [2-1 итоговый рейтинг] это таблица или представление? Уже таблица. Поначалу было представление, (в смысле вьюха/запрос) но она вообще надолго уходила в даун. Сейчас это таблица, поэтому она такая широкая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 12:10 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
ВопрощательСначала попробую Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 12:10 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
ВопрощательAntonariyСначала раскройте маленькую тайну, [2-1 итоговый рейтинг] это таблица или представление? Уже таблица. Поначалу было представление, (в смысле вьюха/запрос) но она вообще надолго уходила в даун. Сейчас это таблица, поэтому она такая широкая. не закончил мысль. В смысле потом джоинить 1,5 млн записей с расшифровкой ключевых полей довольно долго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 12:11 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
ВопрощательAntonariyСначала раскройте маленькую тайну, [2-1 итоговый рейтинг] это таблица или представление? Уже таблица. Поначалу было представление, (в смысле вьюха/запрос) но она вообще надолго уходила в даун. Сейчас это таблица, поэтому она такая широкая.Тогда заодно нужно сделать индекс по всем полям, участвующим в where. Или по отдельному индексу на каждое поле, не знаю, что лучше будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 12:12 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Вопрощательне закончил мысль. В смысле потом джоинить 1,5 млн записей с расшифровкой ключевых полей довольно долго.Джойнить к чему, почему и когда "потом" и что значит "расшифровка"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 12:14 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Antonariy, расшифровка я имею ввиду у меня есть товар (уникальный код) и есть его дерево в принципе можно в готовую таблицу сохранить код товара. А потом подтягивать дерево к конкретному условию. В дереве товаров 300 тыс записей, в этой таблице 1,5. Делать джоин дольше чем при подготовке таблицы сразу засунуть туда все дерево. А дерево далее нужно для использования. а как использовать DISTINCTROW, вот так ругается Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 12:26 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
вам бы в раздел проектирования баз данных для начала. похоже у вас какая-то мешанина в итоговой таблице. попробуйте нормализовать и сделать покрывающие индексы для своего запроса. возможно, если структуру хранения изменить, то будет намного проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 12:31 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Konst_Oneвам бы в раздел проектирования баз данных для начала. похоже у вас какая-то мешанина в итоговой таблице. попробуйте нормализовать и сделать покрывающие индексы для своего запроса. возможно, если структуру хранения изменить, то будет намного проще. спасибо, сам понимаю, что база кривая, но работаю с тем, что досталось. Самому переделывать не хочется. Хотя если сейчас не запущу за адекватное время придется уйти на пару недель с головой на переделку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 12:32 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Konst_One, +1 Но вообще, если хотите дешево и сердито - разберитесь с индексами - это решит 90% ваших проблем. Сделайте хотя бы по одному простому индексу на каждое поле отбора. P.S. С нормальными индексами JOIN не страшен P.P.S. DISTINCTROW пишется после SELECT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 12:34 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
группировочный запрос с HAVING-ом для JET-а очень тяжёлая задача на больших таблицах (тем более на таких плоских и без индексов). постарайтесь последовательно усложнять свой запрос, добиваясь приемлемой производительности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 12:40 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro P.P.S. DISTINCTROW пишется после SELECT спасибо, пойду раскуривать индексы реально where дал прирост сейчас перепроверю резлуьтаты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 13:14 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Konst_Oneгруппировочный запрос с HAVING-ом для JET-а очень тяжёлая задача на больших таблицах (тем более на таких плоских и без индексов). постарайтесь последовательно усложнять свой запрос, добиваясь приемлемой производительности а подскажите разницу между WHERE и HAVING если я верно понял WHERE нельзя использовать с GROUP BY ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 13:14 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Вопрощательа подскажите разницу между WHERE и HAVING если я верно понял WHERE нельзя использовать с GROUP BY ? Последовательность операторов SELECT - выбираеммые поля FROM - таблицы WHERE - условия отбора ДО группировки GROUP BY - группировка HAVING - условия отбора ПОСЛЕ (по результатам) группировки WHERE можно использовать с GROUP BY, но в вашем случае нет необходимости ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 13:20 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
...нет необходимости в GROUP BY ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 13:20 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
ВопрощательЕщё вариант. Можно выводить результаты запросов во временную таблицу. Это и будет ускорение. Например. Разбейте большой запрос на два небольших. Так вот первый запрос, пусть создаёт временную таблицу (как результат своей работы) а второй, пусть на вход берёт эту самую временную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2010, 13:13 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
klen_, спасибо за совет, добился ускорения за счет построения индексов. Парадокс, но скорость выросла более чем в 80 раз. Теперь другой вопрос, почему когда удаляю все записи из таблицы и добавляю туда новые записи запросом на добавление индексация не сохраняется. Но это в нете порыться просто надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2010, 14:21 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Вопрощательдобился ускорения за счет построения индексов. Парадокс, но скорость выросла более чем в 80 раз. Это не парадокс. Скорость может вырасти и в 1000 и в 10000 раз. Для того и придуманы индексы. Это как содержание (или глоссарий) в книге. Если содержания нет, вам придется каждый раз читать всю книгу, чтобы найти нужную запись. По содержанию это будет на порядки быстрее ВопрощательТеперь другой вопрос, почему когда удаляю все записи из таблицы и добавляю туда новые записи запросом на добавление индексация не сохраняется. Но это в нете порыться просто надо. Такого не должно быть. Как именно вы удаляете все записи? Может вы просто грохаете и пересоздаете таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2010, 14:30 |
|
||
|
Ускорение работы запросов
|
|||
|---|---|---|---|
|
#18+
Shocker.ProВопрощательдобился ускорения за счет построения индексов. Парадокс, но скорость выросла более чем в 80 раз. Это не парадокс. Скорость может вырасти и в 1000 и в 10000 раз. Для того и придуманы индексы. Это как содержание (или глоссарий) в книге. Если содержания нет, вам придется каждый раз читать всю книгу, чтобы найти нужную запись. По содержанию это будет на порядки быстрее ВопрощательТеперь другой вопрос, почему когда удаляю все записи из таблицы и добавляю туда новые записи запросом на добавление индексация не сохраняется. Но это в нете порыться просто надо. Такого не должно быть. Как именно вы удаляете все записи? Может вы просто грохаете и пересоздаете таблицу? Нет, я сразу понял что так делать нельзя. Но факт что нужно обнулить таблицу . Создал запрос на DELETE * FROM. Таблица осталась. Запрос который туда пишет, является запросом на добавление. Если использовать составной индекс, почему то слетает. Если индексировать сами поля по отдельности, то все сохраняется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2010, 15:27 |
|
||
|
|

start [/forum/topic.php?all=1&fid=60&tid=2160241]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 14ms |
| total: | 159ms |

| 0 / 0 |
