|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
FB3. Вот такой запрос: Код: sql 1. 2. 3. 4. 5. 6. 7.
Что нужно? Нужно получить все записи в таблице modul, которые имеют записи в таблице defect. Запрос отрабатывает правильно, но долго. Если в exists оставить одну таблицу umass, то поведение exists ожидаемое (читается по одной записи из umass для каждой записи modul). Если в exists две таблицы, то umass весь читается. Вообще таблицы umass и defect большие. Поэтому хочется такого поведения - читаем запись из modul, читаем последовательно umass и defect, если запись есть, то переходим к другой записи modul. Можно ли что-то сделать с exists? Или посмотреть другие техники? Какие? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 00:35 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
А по-крестьянски Код: sql 1. 2. 3. 4.
не? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 01:13 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
KreatorXXI, Код: sql 1. 2. 3.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 01:16 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
Хотя, неправ я в общем случае, тут, возможно нужен left join с проверкой на not null, ибо неясно отношение между таблицами: например, если одной записи таблички modul соответствует больше одной записи таблички umass и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 01:21 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
Да дело не в exist-e, а в индексах, как пить дать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 01:23 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
чччДХотя, неправ я в общем случае, тут, возможно нужен left join с проверкой на not null, ибо неясно отношение между таблицами: например, если одной записи таблички modul соответствует больше одной записи таблички umass и т.д. О, Господи, что это я понаписал. Все, спать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 01:25 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
Старый плюшевый мишкаА по-крестьянски Код: sql 1. 2. 3. 4.
не?По-моему, ты всё написал правильно, но забыл поставить DISTINCT после SELECT: Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 01:56 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
rdb_dev, Такие тонкие советы следует давать, когда ты владеешь достаточным объёмом информации о задаче. Оставь DISTINCT себе. Поскольку sn_mdl в таблице modul может быть изначально неуникальным. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 09:13 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
WildSery, серийный номер в таблицы модулей может быть неуникален в случае совпадения серийных номеров от разных производителей модулей. Добавление в выборку идентификатора производителя эту проблему решит. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 09:19 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
rdb_dev, Продолжаешь решать задачу, условия которой не знаешь, а предполагаешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 09:27 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
WildSery, вернее сказать "домысливаю", исходя из очевидных связей сущностей БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 09:39 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
rdb_dev, Очевидных? Спасибо, поржал. Давно для себя сделал вывод, что очевидное для меня вовсе не очевидно другим. Разбирая очередную поделку команды "ух" разработчиков, почти каждый раз в этом убеждаюсь. Потому скепсис - наше всё. Предпочитаю приятно удивляться, что в этот раз сделано правильно разумно. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 10:41 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
Старый плюшевый мишка, По-крестьянски поинтереснее. Только вот так, конечно: Код: sql 1. 2. 3. 4.
Но мне сейчас не нравится план: авторПлан PLAN JOIN (C NATURAL, B INDEX (PK_UMASS), A INDEX (PK_MODUL)) Почему defect по натуралу? Хотя может из-за того, что таблица defect на данный момент меньше двух других. Если так, то в корне неправильно. Таблица defect склонна к сильному росту. И всю её сканировать неправильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 10:44 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
KreatorXXI, Воспользуйся волшебным +0 А вообще, как только она разрастётся, то план сам поменяется же. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 10:45 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
KreatorXXI, как вырастет пересчитаешь статистику и план изменится. Не вижу в этом проблемы ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 10:47 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
KreatorXXI> И всю её сканировать неправильно. Ну а первоначальный план какой был? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 10:47 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
KreatorXXI, судя по плану запрос не будет эквивалентом exists. defect соединяется не по уникальному ключу, а следовательно будет давать дубликаты записей ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 10:50 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
WildSeryrdb_dev, Очевидных? Спасибо, поржал. Давно для себя сделал вывод, что очевидное для меня вовсе не очевидно другим. Разбирая очередную поделку команды "ух" разработчиков, почти каждый раз в этом убеждаюсь. Потому скепсис - наше всё. Предпочитаю приятно удивляться, что в этот раз сделано правильно разумно.В крайнем случае, можно полагаться на уникальность идентификатора модуля. Такой вариант должен соответствовать: Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 10:59 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
Народ, давайте снова. Таблица umass большая, defect тоже. Какой смысл сканировать в лоб всё, если мне нужно узнать только наличие дочерних записей? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 11:02 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
KreatorXXI, покажи план который был в изначальном запросе с exists ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 11:10 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
KreatorXXI, так укажи запросу тот план, что считаешь правильным. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 11:10 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
KreatorXXI> Какой смысл сканировать в лоб всё Зачем ты начинаешь вещать рассуждать, не понимая азов? Повторяю - покажи план изначального запроса. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 11:22 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
План первого запроса: авторПлан PLAN JOIN (B INDEX (FK_UMASS_RELATIONS_MODUL), C INDEX (DEFECT_IDX1)) PLAN (A NATURAL) DEFECT_IDX1 - это индекс по id_ums. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 11:51 |
|
Exists по двум или более таблицам
|
|||
---|---|---|---|
#18+
KreatorXXI, попробуй вот так Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2017, 11:56 |
|
|
start [/forum/topic.php?fid=40&fpage=41&tid=1561418]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 288ms |
total: | 434ms |
0 / 0 |