|
|
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
К вопросу об индексах и скорости - что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса 1-2 и 3-4, а потом связать их по 2-3. т.е наследуют ли запросы индексы родителей??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2004, 23:13 |
|
||
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
vam911наследуют ли запросы индексы родителей? Да, наследуют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2004, 01:18 |
|
||
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
авторт.е. наследуют ли запросы индексы родителей какой сегодня песенный вечер - просто "подмосковные вечера"... :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2004, 01:36 |
|
||
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
Быстрее то что при тестировании окажется быстрее, а тестирование такого вопроса займет немного времени и даст более точный ответ. Тем неменее в большинстве случаев лучше использовать один запрос, т.к. Access сможет точнее выбрать стратегию его выполнения. Тем немение, вчера лично переделывал процедуру в которой через рекордсет открывался 1 запрос (в нем было тройное обединение двух запросов(отгружено,оплачено) для вычисления выражения (долг=отгружено-оплачено) Заменил на 2 рекорсета по двум запросам + программный анализ значений полей этих запросов для "программного объединения" и вычисления тогоже выражения.Получил ускорение в 10 раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2004, 10:54 |
|
||
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
Можно по пдробней??? + программный анализ значений полей этих запросов для "программного объединения" и вычисления тогоже выражения.Получил ускорение в 10 раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2004, 20:15 |
|
||
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
Медленный запрос "zForDolgOplatDoli" Код: plaintext 1. Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 17:17 |
|
||
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
2 N_A а индексация медленному запросу не помогает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 17:24 |
|
||
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
N_AМедленный запрос "zForDolgOplatDoli" Код: plaintext 1. Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Я на это то же нарывался. Почему-то аксесс при связывании по 2-м и более полям притормаживает (занчительно), однако вопрос был немного другой. Что быстрей (Код - везде индексированно) 1/ SELECT t2.Код, t3.Код FROM ((t1 INNER JOIN t2 ON t1.Код = t2.Код) INNER JOIN t3 ON t1.Код = t3.Код) INNER JOIN t4 ON t1.Код = t4.Код; 2/ или тоже, но побитое на 2 запроса и потом объединенное вместе. запрос 1 SELECT t2.Код FROM t1 INNER JOIN t2 ON t1.Код = t2.Код; запрос 2 SELECT t3.Код FROM t3 INNER JOIN t4 ON t3.Код = t4.Код; запрос 3 - конечный SELECT Запрос1.Код, Запрос2.Код FROM Запрос1 INNER JOIN Запрос2 ON Запрос1.Код = Запрос2.Код; Необходимо когда в запросе 6-7 таблиц и без сникерса врубиться что все это значит невозможно. Логично разибть на чати, но производитьельность??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 17:36 |
|
||
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
автор Логично разибть на чати логично выбросить из запроса t1 и t4, поскольку НИКАКИХ условий фильтрации на этих таблицах не заявлено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 17:41 |
|
||
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
Victosha автор Логично разибть на чати логично выбросить из запроса t1 и t4, поскольку НИКАКИХ условий фильтрации на этих таблицах не заявлено. Связь сама по себе является условием фильтрации (ну и ведь это просто упрощение. Ясно, что в практике запрос по сложней будет). Если индексы наследуются - то скорость должна быть одинакова, а если нет - то второй вариант будет на много медленней. Вот в этом-то и состоит вопрос - наследуются или нет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 17:48 |
|
||
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
автора индексация медленному запросу не помогает? Может и поможет, но не хотелось бы добавлять индексы, если их можно избежать (т.к. таблицы большие и в них осуществляется достаточно интенсивный ввод (3 кассы)). Я думаю проблема в 3-ом объединении и последующем фильтре "WHERE ksgKartID=" & kartID & " and DrDolg>0 ", где DrDolg вычисляется в запросе ([SumRabota]-[SumOplat] AS DrDolg). Мне кажется что Access вычисляет это выражение для всех записей, а потом фильтрует по ksgKartID, еслиб делал наооборот - было бы быстрей. Я привел пример лишь для того, чтобы показать, что не надо во всем расчитывать на ядро Jet и впихивать в запрос все. Иногда (быть может не часто) приходится вычислять самому или пересматривать подход, анализируя узкие места. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 18:00 |
|
||
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
N_A автора индексация медленному запросу не помогает? Может и поможет, но не хотелось бы добавлять индексы, если их можно избежать (т.к. таблицы большие и в них осуществляется достаточно интенсивный ввод (3 кассы)). Я думаю проблема в 3-ом объединении и последующем фильтре "WHERE ksgKartID=" & kartID & " and DrDolg>0 ", где DrDolg вычисляется в запросе ([SumRabota]-[SumOplat] AS DrDolg). Мне кажется что Access вычисляет это выражение для всех записей, а потом фильтрует по ksgKartID, еслиб делал наооборот - было бы быстрей. Я привел пример лишь для того, чтобы показать, что не надо во всем расчитывать на ядро Jet и впихивать в запрос все. Иногда (быть может не часто) приходится вычислять самому или пересматривать подход, анализируя узкие места. А про кассы у меня ничего не было %))) Съехали с темы.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 18:02 |
|
||
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
Сделаем по проще. Может кто-либо скинуть кусок кода для сверки скорости выборки двух запросов ( с учетом кэширования) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 18:03 |
|
||
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
Возьми реальные таблицы и заполни типичными значениями, предположительным числом записей+большой запас. Потом выполни свои 2 варианта запросов, посортируй, пофильтруй. Если на глаз разницы в скорости не заметишь, то делай как удобней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 18:08 |
|
||
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
А кэширование??? так просто не получится... Надо прогу писать, а что бы кэш 100% отрезать надо еще дополнительные знания по работе с кэшом в акссессе иметь ( у меня их нет) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 18:12 |
|
||
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
Важно и с кешированием и без. Для теста без кеширования при каждом следующем тесте можно выходить из Access (можно и перегрузить комп). Если есть серьезная разница, то это будет заметно на глаз, а парится из за нескольких процентов я бы не стал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 18:20 |
|
||
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
N_AВажно и с кешированием и без. Для теста без кеширования при каждом следующем тесте можно выходить из Access (можно и перегрузить комп). Если есть серьезная разница, то это будет заметно на глаз, а парится из за нескольких процентов я бы не стал. Логично... Попробую . Но если у кого есть прога и Вам не влом - скиньте Кодик (там не много должно быть) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 18:23 |
|
||
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
Тут можно качнуть пример с измерением скорости, может что подойдет. http://rlsys.net/access/index.php?type=103&urok=37 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 18:24 |
|
||
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
авторСвязь сама по себе является условием фильтрации (ну и ведь это просто упрощение. Ясно, что в практике запрос по сложней будет). приведенный пример хорош именно тем, что в нем очевидна бессмысленность такой "фильтрации". В "практике" это и просмотреть можно :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 18:43 |
|
||
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
N_AВажно и с кешированием и без. Для теста без кеширования при каждом следующем тесте можно выходить из Access (можно и перегрузить комп). Если есть серьезная разница, то это будет заметно на глаз, а парится из за нескольких процентов я бы не стал. Сволочи - оба быстро выполняются, не поймещь, кто быстрей :(((. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 18:54 |
|
||
|
Сравнение скорости (что быстрей - связать 4 таблицы по индексным полям 1-2-3-4 или сделать 2 запроса)
|
|||
|---|---|---|---|
|
#18+
vam9111/ SELECT t2.Код, t3.Код FROM ((t1 INNER JOIN t2 ON t1.Код = t2.Код) INNER JOIN t3 ON t1.Код = t3.Код) INNER JOIN t4 ON t1.Код = t4.Код; 2/ или тоже, но побитое на 2 запроса и потом объединенное вместе. запрос 1 SELECT t2.Код FROM t1 INNER JOIN t2 ON t1.Код = t2.Код; запрос 2 SELECT t3.Код FROM t3 INNER JOIN t4 ON t3.Код = t4.Код; запрос 3 - конечный SELECT Запрос1.Код, Запрос2.Код FROM Запрос1 INNER JOIN Запрос2 ON Запрос1.Код = Запрос2.Код; Есть мнение, что скорость зависит в каждом конкретном случает от интелекуальности планировщика запроса. Может оказаться, что вариант (1) быстрее а может оказаться, что (2) будет быстрее. И еще не стоит забывать, что возможны различные потребности по памяти для исполнения этих запросов. При недостатке свободной памяти - это может оказаться рещающим фактором в скорости выполнения запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 00:47 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32559486&tid=1673863]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
183ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 506ms |

| 0 / 0 |
