|
|
|
Join & Where: курица или?
|
|||
|---|---|---|---|
|
#18+
Люди! Теоретический вопрос: что будет работать быстрее (и что правильнее) - сначала два запроса по разным таблицам с условиями Where - затем из их результатов Join или - сразу Join со всеми Where в одном запросе? мысль в том что не происходит ли во втором случае Join по всем данным вместо первичного налажения условий?!.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 12:44 |
|
||
|
Join & Where: курица или?
|
|||
|---|---|---|---|
|
#18+
А попробовать самому и засечь время? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 12:56 |
|
||
|
Join & Where: курица или?
|
|||
|---|---|---|---|
|
#18+
д.б. по барабану, но можно проверить планы вариантов запросов И лучше не время засекать, а использовать ISAM статистику (DBEngine.ISAMStats). У Гетца есть хороший пример (а если в него добавить и таймер...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 13:16 |
|
||
|
Join & Where: курица или?
|
|||
|---|---|---|---|
|
#18+
была надежда, что это общеизвестный вопрос... хорошо а такая мысль: что быстрее - выдавать отчету источник данных в виде запроса с ключевыми полями (ID) (и пусть отчет сам через запросы в полях со списком подставляет текст по полученным ID - а быстро ли это?) или -сразу в запросе выдать отчету текст и не мучать отчет (группировать по тексту будет медленнее)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 16:28 |
|
||
|
Join & Where: курица или?
|
|||
|---|---|---|---|
|
#18+
>(и пусть отчет сам через запросы в полях со списком подставляет текст по полученным ID - а быстро ли это?) 1000 записей - 1000 мелких запросов, плюс по 1000 мелких запросов при печати и переходе по страницам. Фиговая мысль у тебя возникла, а вот если бы возникла мысль результат работы запроса слить во временную таблицу и использовать эту врем. таблицу в качестве источника записей отчета - то да - это была бы мысля! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 16:35 |
|
||
|
Join & Where: курица или?
|
|||
|---|---|---|---|
|
#18+
м-да многоуважаемый Олл присутствует в единственном числе.... неужель людЯм нечего сказать? хоть КТО КАК РАБОТАЕТ?!.. Кто нибудь поля со списком в отчетах вообще втыкает? или это бред сивушной кобылы что я так делаю? 2 SV Спасибо за ответы! ваабче-то была два варианта: или отчет заставлять полями со списком пользоваться (ты его отвергаешь) или подсунуть ему сразу текст - и он будет группировать текст неиндексированный (это точно быстрее?) ты предлагаешь второй вариант слитый в таблицу понимаю и для отчетов на десятках тысяч и более записей поддерживаю а для мелких зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 17:10 |
|
||
|
Join & Where: курица или?
|
|||
|---|---|---|---|
|
#18+
А каков смысл полей со списком в отчетах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 17:29 |
|
||
|
Join & Where: курица или?
|
|||
|---|---|---|---|
|
#18+
Имхо. Все зависит от условий постановки задачи и условий в которых работает программа. Есть две критичные точки: время формирования отчета и сетевой траффик. Желательно уменьшить и то и другое, но возможны варианты, когда одно уменьшается, а другое увеличивается и наоборот. Для ADP+SQL: берем Profiler и какую-нибудь программку измерения сетевого траффика. Я при подобных тестированиях использовал T-Meter (точное название не помню). Запросы ловим через Profiler смотрим планы выполнения. Траффик считаем с помощью программы. Сравниваем результаты различных вариантов и реализуем тот, который больше подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 18:48 |
|
||
|
Join & Where: курица или?
|
|||
|---|---|---|---|
|
#18+
Вот что говорят про группировку и джойн: Microsoft Knowledge Base Article - 112112 If a totals query includes a join, try grouping the records in one query and adding this query to a separate query that will perform the join. This improves performance in some queries. For example, instead of the following query SELECT Customers.[Company Name], Customers.[Contact Name], Max(Orders.[Order Date]) AS [MaxOfOrder Date] FROM Customers INNER JOIN Orders ON Customers.[Customer ID] = Orders.[Customer ID] GROUP BY Customers.[Company Name], Customers.[Contact Name]; break the query into two separate queries, as follows: Q1: SELECT Orders.[Customer ID], Max(Orders.[Order Date]) AS [MaxOfOrder Date] FROM Orders GROUP BY Orders.[Customer ID]; Q2: SELECT Customers.[Company Name], Customers.[Contact Name], Q1.[MaxOfOrder Date] FROM Q1 INNER JOIN Customers ON Q1.[Customer ID] = Customers.[Customer ID]; Note that Microsoft Access usually "collapses" queries where possible. Other than situations specifically noted in this article, it should not make any difference whether you have a query based on another query, or create one query. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2004, 16:29 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32379027&tid=1676761]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
141ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 452ms |

| 0 / 0 |
