Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Выявление новой сущности.
|
|||
|---|---|---|---|
|
#18+
Что бы не путаться с терминологией, буду говорить на физическом уровне. Есть две таблицы (t1, t2) одинаковой структуры. Необходимо в t2 найти все такие записи которые отсутствуют в t1. Первое что приходит в голову: Код: plaintext 1. 2. 3. 4. 5. 6. 7. но сами понимаете что сильно тормозит. На 10000 записях минуту работает. Понимаю что подобная задача в общем случае так и решается. Но может быть при каких ни будь условиях, можно добиться большой производительности? Кто что думает. Кстати делаю на FB 1.5, хотя это не принципиально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2004, 09:37 |
|
||
|
Выявление новой сущности.
|
|||
|---|---|---|---|
|
#18+
Если Primary key - это одно поле, то можно например так Код: plaintext 1. 2. И если конечно же авторНеобходимо в t2 найти все такие записи которые отсутствуют в t1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2004, 10:18 |
|
||
|
Выявление новой сущности.
|
|||
|---|---|---|---|
|
#18+
Извечная проблема NOT EXISTS Необходим(ы) индекс(ы) по ключевым полям. Затем такой запрос: Код: plaintext 1. 2. 3. 4. 5. 6. На миллоне записей работает шустро :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2004, 10:34 |
|
||
|
Выявление новой сущности.
|
|||
|---|---|---|---|
|
#18+
Нет, в том и беда что реальный (не сурогатный) PK это все поля. Я вообщем то понимаю что SQL не оптимален в этой задаче. Даже готов тягать все на клиента. Но опять же не могу придумать ни одного умного алгоритма... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2004, 10:36 |
|
||
|
Выявление новой сущности.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Antony BorovinЯ вообщем то понимаю что SQL не оптимален в этой задаче Ошибаетесь. Реляционная теория, на основе которой построен SQL и которой он в идеале должен следовать, включает операцию MINUS. К сожалению далеко не все вендоры СУБД эту операцию реализуют.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2004, 12:13 |
|
||
|
Выявление новой сущности.
|
|||
|---|---|---|---|
|
#18+
Павел Воронцов Ошибаетесь. Реляционная теория, на основе которой построен SQL и которой он в идеале должен следовать, включает операцию MINUS. К сожалению далеко не все вендоры СУБД эту операцию реализуют.. Я согласен с вами. Я имел ввиду что все известные мне реализации SQL в конкретных продуктах мало пригодны для этого. А какие СУБД поддерживают MINUS? (это слово, кстати, даже вон не выделяется цветом на форуме :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2004, 12:59 |
|
||
|
Выявление новой сущности.
|
|||
|---|---|---|---|
|
#18+
А какие СУБД поддерживают MINUS? (это слово, кстати, даже вон не выделяется цветом на форуме :) Oracle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2004, 13:19 |
|
||
|
Выявление новой сущности.
|
|||
|---|---|---|---|
|
#18+
DB2 тоже поддерживает MINUS, только он там по другому называется (кажется EXCEPT) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2004, 13:29 |
|
||
|
Выявление новой сущности.
|
|||
|---|---|---|---|
|
#18+
Из мощных и недорогих - в Sybase ASA 9 есть EXCEPT - Computes the difference between the result sets of two or more queries. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2004, 13:29 |
|
||
|
Выявление новой сущности.
|
|||
|---|---|---|---|
|
#18+
авторНет, в том и беда что реальный (не сурогатный) PK это все поля. У Вас в таблице сколько полей? 10? 20? 30? Всё таки, Primary key есть или его нет? Если нет, то необходимо что бы он появился. Придумайте алгоритм по которому можно на основании информации хранящейся в записи таблицы сформировать искусственный (вычисляемый) PK. Хотя возможно, что формирование этого PK может занять время сопоставимое или даже большее чем в Вашем варианте. Отсутствие естественного PK на мой взгляд есть наглядный пример плохого дизайна. Как бы Вы не выкрутились, но структуру таблиц я бы посоветовал Вам изменить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2004, 14:35 |
|
||
|
Выявление новой сущности.
|
|||
|---|---|---|---|
|
#18+
Antony Borovin. Причем тут проектирование БД? Рутинный запрос, сто раз обсосаный на всех форумах. Напишите, на какой базе Вы работаете, и я его перекину в соответсвующий форум. Если Вы не умеете пользоваться поиском, то всегда найдется парочка альтруистов, которые это сделают за Вас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2004, 20:46 |
|
||
|
Выявление новой сущности.
|
|||
|---|---|---|---|
|
#18+
Ermak Всё таки, Primary key есть или его нет? Если нет, то необходимо что бы он появился. Придумайте алгоритм по которому можно на основании информации хранящейся в записи таблицы сформировать искусственный (вычисляемый) PK. Хеш-функция явно будет рулить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2004, 11:06 |
|
||
|
Выявление новой сущности.
|
|||
|---|---|---|---|
|
#18+
Ermak У Вас в таблице сколько полей? 10? 20? 30? Всё таки, Primary key есть или его нет? Если нет, то необходимо что бы он появился. Придумайте алгоритм по которому можно на основании информации хранящейся в записи таблицы сформировать искусственный (вычисляемый) PK. Хотя возможно, что формирование этого PK может занять время сопоставимое или даже большее чем в Вашем варианте. В таблице 11 полей, 4 из них VARCHAR. В том и беда что все они в совокупности однозначно определяют сущность, то есть являются PK. О хэше конечно же подумал в первую очередь - время действительно сопоставимо. Так что на моих объемах данных он не дает выигрыша. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2004, 12:53 |
|
||
|
Выявление новой сущности.
|
|||
|---|---|---|---|
|
#18+
Cat2 Причем тут проектирование БД? Да собственно потому и сюда написал, что на чудо надеялся. Может кто подскажет что ни будь, о чем я по своей глупости даже и не подозревал. :) Нет, чудес не бывает... Собственно, Павел Воронцов, уже все сказал. Больше спасибо - на глаз вариант с left join работает побыстрее. Зря я его сразу отбросил. Cat2 Рутинный запрос, сто раз обсосаный на всех форумах. Напишите, на какой базе Вы работаете, и я его перекину в соответсвующий форум. Если Вы не умеете пользоваться поиском, то всегда найдется парочка альтруистов, которые это сделают за Вас. Спасибо за Ваше предложение! Если Вы имели ввиду, что дадите мне ссылку на толковый тред, то я работаю под FB 1.5. Однако, естественно, я пошерстил форум прежде чем задавать вопрос. Надеюсь я что-то пропустил, на что Вы обратите мое внимание. :) Если Вы предлагаете создать новый тред, то не стоит - думаю тут уже все сказали. Всем, спасибо - узнал много нового. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2004, 13:09 |
|
||
|
Выявление новой сущности.
|
|||
|---|---|---|---|
|
#18+
Antony Borovin О хэше конечно же подумал в первую очередь - время действительно сопоставимо. Так что на моих объемах данных он не дает выигрыша. Что значит "не дает выигрыша"? Хеш-функция срабатывает в триггере по инсерту и апдейту и формирует PK. А затем этот PK используешь. И все, время запроса сократится до минимума. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2004, 15:13 |
|
||
|
Выявление новой сущности.
|
|||
|---|---|---|---|
|
#18+
Jinn Что значит "не дает выигрыша"? Хеш-функция срабатывает в триггере по инсерту и апдейту и формирует PK. А затем этот PK используешь. И все, время запроса сократится до минимума. Нет в общем случае конечно дает, спора нет. Но только на моем объеме данных (достаточно небольшом ~10-15 тыс) это не существенно. Было бы 10~15 млн, тогда да. Кроме того тригер тоже мимо - заливка идет одной порцией. Вообщем то я ССЗБ - надо было формулировать вопрос нормально. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2004, 09:56 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=32394287&tid=1546639]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
170ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 285ms |

| 0 / 0 |
