|
|
|
Простой запрос со "сложным Планом" ;)
|
|||
|---|---|---|---|
|
#18+
Здаров ! Вот такой вопрос. Не пойму в чем дело. Есть две таблицы в БД: class, document. в Document поля : document_id (PK), name и т.д. в CLASS: class_id, document_id (FK)^ Так вот надо мне выбрать все документы из таблицы document которые не упоминаются в CLASS (по полю document_id). Код: plaintext 1. 2. 3. Вот эта простая сволочь дает такой План Код: plaintext 1. 2. 3. 4. 5. в Document - 50000 записей - очень долго выбирает. ПОЧЕМУ ТАК ???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 15:45 |
|
||
|
Простой запрос со "сложным Планом" ;)
|
|||
|---|---|---|---|
|
#18+
Может, я что не понял: SELECT document.document_id FROM document LEFT OUTER JOIN class ON (class.document_id = document.document_id) where class.document_id is null давай заменим на SELECT document.document_id FROM document where document_id is null ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 15:53 |
|
||
|
Простой запрос со "сложным Планом" ;)
|
|||
|---|---|---|---|
|
#18+
to mv: Ты не правильно понял, куда ты дел таблицу Class то? Выбрать все записи из Document которые не упоминаються в таблице Class! Т.е. чтобы document.document_id не было в class.document_id Проще конечно написать Код: plaintext 1. 2. Но так получаеться то же самое PLAN DOCUMENT NATURAL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 16:03 |
|
||
|
Простой запрос со "сложным Планом" ;)
|
|||
|---|---|---|---|
|
#18+
А какой план ты ожидал увидеть? В этом запросе нет никакой возможности применить индекс по document. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 16:03 |
|
||
|
Простой запрос со "сложным Планом" ;)
|
|||
|---|---|---|---|
|
#18+
to: Dimitr Привет. Слушай а как же тогда быть ? т.е. в принципе нельзя сделать запрос быстрее ? или как то подругому выборку можнос сделать. Я так понял что через "not in" и "outer Join" без Natural plan'а не получиться ? :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 17:35 |
|
||
|
Простой запрос со "сложным Планом" ;)
|
|||
|---|---|---|---|
|
#18+
Ну, раз очень нужно - то вот вариант: - в таблицу Document добавить поле Class_Count - при добавлении/удалении/перемещении между документами экземпляров таблицы Class - соответственно модифицировать это поле с условием "... where document_id = ...". Например, с помощью триггеров. Индексирует по этому полю, и выбираем все, у которых это Class_Count = 0. Выборка будет - быстрее некуда. Select Sum(*) from Document where Class_Count = 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 17:53 |
|
||
|
Простой запрос со "сложным Планом" ;)
|
|||
|---|---|---|---|
|
#18+
Извиняюсь, вернее: Select Document_Id from Document where Class_Count = 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 17:54 |
|
||
|
Простой запрос со "сложным Планом" ;)
|
|||
|---|---|---|---|
|
#18+
Вот так должно бы быть побыстрее Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 17:54 |
|
||
|
Простой запрос со "сложным Планом" ;)
|
|||
|---|---|---|---|
|
#18+
Один черт по Document план натуральный будет. А в моем варианте - по индексу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 17:59 |
|
||
|
Простой запрос со "сложным Планом" ;)
|
|||
|---|---|---|---|
|
#18+
to Johnmen та же матрена в другом сарафане получается. PLAN :( to mv Щас попробую - не плохой вариант, хотя и громоздкий ! Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2004, 09:35 |
|
||
|
Простой запрос со "сложным Планом" ;)
|
|||
|---|---|---|---|
|
#18+
Иногда в таких сучаях Exists не плохо работает: SELECT A.document_id FROM document A WHERE NOT EXISTS (SELECT 1 FROM class B WHERE B.document_id =A.document_id ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2004, 10:06 |
|
||
|
Простой запрос со "сложным Планом" ;)
|
|||
|---|---|---|---|
|
#18+
to FreemanZAV Код: plaintext 1. 2. 3. 4. 5. Вообще говоря мне кажется это не логичным - почему через PLAN то, мля!!!!??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2004, 10:48 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32464898&tid=1578923]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
73ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 411ms |

| 0 / 0 |
