Re: Игры разума 2 | |
---|---|
Prudivus Сообщений: 4283 Откуда: Кишинев Дата регистрации: 14.12.2006 |
Ага. А вариант с replace делает миллион записей за 2 сек.
|
Re: Игры разума 2 | |
---|---|
PaulWist Сообщений: 14618 Дата регистрации: 01.04.2004 |
Э-э-э, а ф-ия 100 тыс сделала за 0.41 сек
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Игры разума 2 | |
---|---|
leonid Автор Сообщений: 3204 Откуда: Рига Дата регистрации: 03.02.2006 |
Черт, а на шестерке и с _VFP.DoCmd не работает, только ошибка уже другая. Кстати, объявления переменных, пожалуй тоже можно в _VFP.DoCmd засунуть, так что чистое решение получится. Но в моем первоначальном решении никакие переменные не использовались - чистый SQL, и работало около пол-секунды. Если до вечера никто не догадается, завтра утром выложу. |
Re: Игры разума 2 | |
---|---|
AleksM Сообщений: 17881 Дата регистрации: 11.11.2003 |
На лимоне скорость падает на порядок, 18,042сек.
------------------ Лучше переесть, чем недоспать. Не спеши, а то успеешь. |
Re: Игры разума 2 | |
---|---|
Prudivus Сообщений: 4283 Откуда: Кишинев Дата регистрации: 14.12.2006 |
Для интереса проделал это самое на MSSQL2K (MSDE):
Заполнение таблицы в цикле (100000 записей) - 50 сек. Расчет набегающей суммы, первый раз - 37 сек. Расчет набегающей суммы, повторно - 2 сек. Тормоз, однако, MSSQL... |
Re: Игры разума 2 | |
---|---|
Prudivus Сообщений: 4283 Откуда: Кишинев Дата регистрации: 14.12.2006 |
Да, есть вариант:
А REPLACE - за 2. К тому же, если будет пропуск в последовательности id - то все летит к чертям. В варианте с REPLACE такого не будет, все по-честному, корректно. Исправлено 3 раз(а). Последнее : Prudivus, 15.03.07 19:39 |
Re: Игры разума 2 | |
---|---|
leonid Автор Сообщений: 3204 Откуда: Рига Дата регистрации: 03.02.2006 |
Браво!
Для сравнения приведу авторский
Цитата:Да я ничего и не говорю, конечно, такие задачи надо решать с помощью replace. Просто хотелось продемонстрировать некоторые возможности SQL. P.S. А еще у меня возникли сомнения по поводу выполнения на MS SQL
|
Re: Игры разума 2 | |
---|---|
AleksM Сообщений: 17881 Дата регистрации: 11.11.2003 |
Цитата:Крутился рядышком вокруг этого, НО не докрутился. ------------------ Лучше переесть, чем недоспать. Не спеши, а то успеешь. |
Re: Игры разума 2 | |
---|---|
PaulWist Сообщений: 14618 Дата регистрации: 01.04.2004 |
Мда-с, не ожидал, что при опубликовании решения появится дополнительное условие
Есть один способ - это использование кластерного индекса
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Игры разума 2 | |
---|---|
Prudivus Сообщений: 4283 Откуда: Кишинев Дата регистрации: 14.12.2006 |
|
Re: Игры разума 2 | |
---|---|
PaulWist Сообщений: 14618 Дата регистрации: 01.04.2004 |
Ну не скажи, давай приведем условие к исходной задаче
Обрати внимание на суммы для кластерного id = 1 sum = 5, а для не кластерного id = 1 sum = 9 Цитата: ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Игры разума 2 | |
---|---|
leonid Автор Сообщений: 3204 Откуда: Рига Дата регистрации: 03.02.2006 |
А что за условие? Я что-то не заметил. |
Re: Игры разума 2 | |
---|---|
Prudivus Сообщений: 4283 Откуда: Кишинев Дата регистрации: 14.12.2006 |
PaulWist
В базовом условии задачи было что записи отсортированы по возрастанию ПК, а в твоем примере - сортируются то так то эдак (по убыванию: 3, 2, 1). Поэтому и результат разный. |
Re: Игры разума 2 | |
---|---|
PaulWist Сообщений: 14618 Дата регистрации: 01.04.2004 |
Э-э-э, вот это Цитата: Те тестовые данные конечно удовлетворяют первоначальной задаче, НО только для именно таких данных, что не является решением в общем случае. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Игры разума 2 | |
---|---|
PaulWist Сообщений: 14618 Дата регистрации: 01.04.2004 |
В том-то и дело, что если заполнить 1,2,3 то это будет частный случай, исключение, для общего решения когда записи добавляются не в порядке возрастания спасет только кластерный индекс, который "своей волей" физически положит записи в нужном нам порядке. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Игры разума 2 | |
---|---|
leonid Автор Сообщений: 3204 Откуда: Рига Дата регистрации: 03.02.2006 |
При формулировке задачи был приведен код формирования данных. Не понимаю, почему кем-то придуманные дополнительные условия можно считать появившимися при опубликовании авторского решения.
|
Re: Игры разума 2 | |
---|---|
PaulWist Сообщений: 14618 Дата регистрации: 01.04.2004 |
Вопрос (обвинение ) снимается, только мне кажется, что решение должно быть общим и не зависить от данных. ;) ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Игры разума 2 | |
---|---|
leonid Автор Сообщений: 3204 Откуда: Рига Дата регистрации: 03.02.2006 |
В приведенной задаче данные - это поле f1. От них решение не зависит. |
Re: Игры разума 2 | |
---|---|
PaulWist Сообщений: 14618 Дата регистрации: 01.04.2004 |
Ну наверное не зависит. Только не работает приведенный код
А так работает
Лично для меня такое решение является не правильным. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Игры разума 2 | |
---|---|
Prudivus Сообщений: 4283 Откуда: Кишинев Дата регистрации: 14.12.2006 |
Повторюсь:
Цитата:Имеется в виду что при выборке реальных данных во временную таблицу (курсор в терминах фокса), всегда есть возможность явно задать сортировку. А без сортировки - да, конечно работать не будет, и единственно правильно использовать вложенные селекты. Но на больших объемах это катастрофическая потеря быстродействия, поэтому и приходится придумывать подобные методы. Это все из реальной практики. Похожую тему я поднимал в "Вопросы не для собеседования". Там предлагалось найти "академическое" решение связывания таблиц M-N, в котором как подзапрос вычисляется и набегающая сумма... Исправлено 1 раз(а). Последнее : Prudivus, 16.03.07 11:52 |
© 2000-2024 Fox Club  |