|
|
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
Johnmen Извиняй за грубость, но для непонятливых : Не Убитых енотов, не Буказоидов и уж точно не Другое, а просто IB(FB) читает записи и количество этих чтений 200000*200000 = 40 000 000 000 (записей). Такой запрос будет неделю выполняться ... P.S. И эту проблему не решить иначе, чем использовать ХП, а поскольку у Nikita Krivtsov нет возможности вносить изменения (хотя почему такие жесткие условия), то решения просто нет ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 10:06 |
|
||
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
StarWind подобный запрос который предлагали у меня работает менее секунды, при индексах разумеется. Не забывай про кол-во записей в таблице, у меня тоже "быстро" (30 сек) , но их там 17000. А тут и индексов нет ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 10:13 |
|
||
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
Dnico Сорри, я забыл указать кол-во записей в таблицах... порядка 300000 пропишу прописью, триста тысяч! и не надо заливать что ХП единственная возможность ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 10:20 |
|
||
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
StarWind НЕ ВЕРЮ - ПИШИ ЗАПРОС ПРОВЕРЮ НА СВОИХ 300000 записях ... Индекс по дате есть ... и по ID тоже ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 10:38 |
|
||
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
>Dnico >Извиняй за грубость, но для непонятливых : Да все нормально. И я к ним не отношусь. А по поводу чтений - неужели ты думаешь, что за 1 (одну) операцию чтения читается одна запись ??? :) Поверь, это совсем не так. Единицой чтения является страница. На которой м.б. несколько записей. Поэтому указанное тобой произведение 200000*200000 ни о чем не говорит. И уж тем более неделя здесь совсем неуместна...:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 10:44 |
|
||
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
Johnmen Если вдаваться в подробности, то я согласен, там все не так просто, но все равно существует элементарные операции выборки записей. Так вот я говорю об этом количестве выборок ... И существует еще и реальный пример, который показывает статистику выполнения запроса. Могу показать ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 10:52 |
|
||
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
select * from table1 where dtime = (select max(dtime) from table1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 10:57 |
|
||
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
StarWind Ну и что дает этот запрос ? Ничего того, что нужно ... Тем более одну запись ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 11:03 |
|
||
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
>StarWind Ни-ни...:) >Dnico Да нет, не надо... Уже отклонились от темы. А по ней видится 2 решения, каждое из которых надо попробовать : 1. Индекс+Запрос 2. ХП с соотв-ей логикой И п.2, скорее всего, в данном случае, самое быстрое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 11:04 |
|
||
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
сорри, протупил с запросом.... но честно гвооря надо проэксперементировать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 11:06 |
|
||
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
Johnmen Вот я и говорю, что через запрос это просто почти невозможно ... очень долго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 11:10 |
|
||
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
************************************************************** select good_id, price, last_edt from table_2000 t1 where last_edt=(select max(last_edt) from table_2000 t2 where t2.good_id = t1.good_id) ------ Performance info ------ Prepare time = 3ms Execute time = 16s 516ms Avg fetch time = 4 129,00 ms Current memory = 18 118 656 Max memory = 18 398 384 Memory buffers = 2 048 Reads from disk to cache = 0 Writes from cache to disk = 6 Fetches from cache = 8 033 956 ************************************************************** select t1.good_id, price, max(t1.last_edt) from table_2000 t1 group by good_id, price having last_edt=(select max(t2.last_edt) from table_2000 t2 where t2.good_id = t1.good_id) ------ Performance info ------ Prepare time = 4ms Execute time = 16s 188ms Avg fetch time = 952,24 ms Current memory = 18 124 800 Max memory = 18 398 384 Memory buffers = 2 048 Reads from disk to cache = 0 Writes from cache to disk = 0 Fetches from cache = 7 840 702 ************************************************************** select good_id, max(last_edt), (select max(price) from table_2000 t2 where t2.table_id = t1.table_id) as price from table_2000 t1 group by good_id ------ Performance info ------ Prepare time = 6ms Execute time = 127ms Avg fetch time = 7,47 ms Current memory = 18 263 128 Max memory = 18 518 296 Memory buffers = 2 048 Reads from disk to cache = 0 Writes from cache to disk = 6 Fetches from cache = 14 057 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 12:28 |
|
||
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
>Vagoo В последнем примере ошибка :) И даже не одна... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 15:48 |
|
||
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
> Johnmen Может быть. Зато оно работает и дает правильный результат :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 16:06 |
|
||
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
Vagoo Execute time = 127ms Отличный результат, только вот один вопрос: По каким полям у тебя индексы и какой план получается? P.S. И ище у тебя комп случаем не 64-х процессорный ? А то я уже минут пять жду результатов по этому запросу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 16:24 |
|
||
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
>Vagoo И результат дает неверный :) Неверный принципиально ! Верный результат - это тебе так кажется, поскольку он основан на твоих данных, которые обладают специфической однобокостью. (Напр. макс. дате соответствует макс.цена, что не явл-ся обязятельным) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 16:24 |
|
||
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
Вот мои результаты : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 16:47 |
|
||
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
> Dnico select id, max(dt), (select max(price) from delivery t2 where t2.id = t1.id) as price from delivery t1 group by id В твоем запросе существует один ID , который по всей видимости товар. А у меня GOOD_ID - товар, TABLE_ID - идентификатор записи, он же праймери кей, естественно он же и индекс. Поэтому и время отличается, наверное. > Johnmen Что касается однобокости - то действительно я таблицу сгенерил. Но после этого внес руками изменения в несколько рекордов, для контроля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 17:11 |
|
||
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
>Dnico Вот это абсолютно похоже на правду ! Единственное не max(price), а max(date). >Vagoo Еще раз попытаюсь объяснить, что твой запрос ПРИНЦИПИАЛЬНО НЕВЕРЕН ! Потому, что соединять надо не по ключу, а по идентификатору товара ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 17:53 |
|
||
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
> Johnmen Я не отрицаю, что запрос принципиально не верен. Я его сделал случайно и очень удивился когда оно заработало. Более того, специально слепил таблицу на 200000 строк и убедился что цена получается неправильная, хоть и работает бысто :( Но почему тогда запрос из таблицы в 2000 строк дает верный результат ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 18:51 |
|
||
|
Выборка данных без дубликатов из таблицы в 200000 записей
|
|||
|---|---|---|---|
|
#18+
И все равно получается ерунда ... не дает все это нужного результата ... УВЫ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 10:17 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32242215&tid=1580085]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
154ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
78ms |
get tp. blocked users: |
2ms |
| others: | 214ms |
| total: | 500ms |

| 0 / 0 |
