|
|
|
Альтернатива SQL запросам
|
|||
|---|---|---|---|
|
#18+
EmerymiksoftДанный код эмулирует лишь один из вариантов выполнения исходного SQL-запроса. Причем не самый оптимальный в случае, когда количество записей в таблицах table_1 и table_2 сопоставимо и велико. Пока это голословное утверждение. Если вы так говорите, то приведите вариант более оптимального решения по аналогии с моим. Количество записей в table_2 не принципиально, поскольку обращение к ним происходит по индексу. Конечно, время запроса зависит от количества записей в table_1, но таково условие запроса, поскольку должны быть проверены ВСЕ его записи на предмет их не вхождения в table_2. Вообще-то конечно можно говорить о более эффективном запросе, но тогда нужно реорганизовывать нашу БД . Например, в table_1 добавить логический признак присутствия или отсутствия его идентификатора в table_2, который можно вычислять при вставке очередной записи в table_1. Пусть это будет поле IsId2 в table_1 . Тогда наш код немного упростится. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Вы хотите сказать, что непосредственный запрос Код: plaintext 1. Давайте, тогда большие тестовые таблицы table_1 и table_2 и мы замеряем эти варианты в VFP (или где хотите) и на С++. Правда на разных компьютерах это делать глупо, но что-нибудь придумать можно. Ну а, что? Мне вот стало это интересно. Давайте проведем эксперимент, только чуть усложним. Запрос будет выполнятся не один раз, а скажем в 20-30 параллельных сессиях раз так по 50 и замерим суммарный результат. Согласны? Я приведу результаты по Вашему выбору для MSSQL Express 2005 или 2008, т.е. можете потом сами проверить, только и Вы пожалуйста обеспечьте фальсифицируемость ваших результатов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2009, 21:49:11 |
|
||
|
Альтернатива SQL запросам
|
|||
|---|---|---|---|
|
#18+
TheBatya, написал полную хуйню на фоксе парниша, могбы и не позорится )) Модератор: приподзабанен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2009, 00:05:02 |
|
||
|
Альтернатива SQL запросам
|
|||
|---|---|---|---|
|
#18+
TheBatyaНу а, что? Мне вот стало это интересно. Давайте проведем эксперимент, только чуть усложним. Запрос будет выполнятся не один раз, а скажем в 20-30 параллельных сессиях раз так по 50 и замерим суммарный результат. Согласны? Я приведу результаты по Вашему выбору для MSSQL Express 2005 или 2008, т.е. можете потом сами проверить, только и Вы пожалуйста обеспечьте фальсифицируемость ваших результатов. Мне не совсем понятна логика эксперимента. Зачем 30*50 = 1500 раз делать одно и тоже? Проще сделать запрос один раз и скопировать его результат 1500 раз, в чем тоже не слишком много смысла :) . Допустим моя программа делает подобную оптимизацию, тогда что мы докажем в своих экспериментах? Речь то шла не об этом, а о том, что нельзя написать запрос без операторов SQL, сопоставимый с ними по скорости выполнения. А эксперимент я предлагал другой, просто взять пару гектарных таблиц table_1 и table_2 на миллионы записей, таких, что они имеют общий идентификатор Id, множество пересечения которых от 10% до 90%. Предварительное условие, table_2 индексирована по Id, либо table_1 содержит поле IsId2 вхождаемости table_1.Id во множество table_2.Id. Результат должен быть в table_3. Эта задача была бы более интересной, но, откровенно говоря, мне сейчас больше хочется заниматься непосредственно программированием того, что я задумал, чем отвлекаться на такие «пустяки» :) . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2009, 08:44:57 |
|
||
|
Альтернатива SQL запросам
|
|||
|---|---|---|---|
|
#18+
Emery Мне не совсем понятна логика эксперимента. Зачем 30*50 = 1500 раз делать одно и тоже? Проще сделать запрос один раз и скопировать его результат 1500 раз, в чем тоже не слишком много смысла :) . Допустим моя программа делает подобную оптимизацию, тогда что мы докажем в своих экспериментах? Речь то шла не об этом, а о том, что нельзя написать запрос без операторов SQL, сопоставимый с ними по скорости выполнения. А эксперимент я предлагал другой, просто взять пару гектарных таблиц table_1 и table_2 на миллионы записей, таких, что они имеют общий идентификатор Id, множество пересечения которых от 10% до 90%. Предварительное условие, table_2 индексирована по Id, либо table_1 содержит поле IsId2 вхождаемости table_1.Id во множество table_2.Id. Результат должен быть в table_3. Эта задача была бы более интересной, но, откровенно говоря, мне сейчас больше хочется заниматься непосредственно программированием того, что я задумал, чем отвлекаться на такие «пустяки» :) . Ну хорошо, не будем 50 раз, будем один, но в 100 параллельных сессиях. Тут то логика, надеюсь, ясна? Мы как бы подразумеваем )), что пользователей программы может быть больше одного. И все они могут ломануться за одним отчетом. Будем запускать именно Ваш скрипт, если уж он вам так интересен, (хотя на мой взгляд задача то тривиальная и интерес-то должны вызывать выборки похитрее). Emery но, откровенно говоря, мне сейчас больше хочется заниматься непосредственно программированием того, что я задумал, чем отвлекаться на такие «пустяки» :) . Ну лень, так лень. Зачем было вообще тогда начинать разговор о скорости. Программируйте тогда свой одноразовый велосипед. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2009, 09:57:13 |
|
||
|
Альтернатива SQL запросам
|
|||
|---|---|---|---|
|
#18+
EmerymiksoftEmerymiksoftДанный код эмулирует лишь один из вариантов выполнения исходного SQL-запроса. Причем не самый оптимальный в случае, когда количество записей в таблицах table_1 и table_2 сопоставимо и велико.Пока это голословное утверждение. Если вы так говорите, то приведите вариант более оптимального решения по аналогии с моим. Количество записей в table_2 не принципиально, поскольку обращение к ним происходит по индексу.Именно, что принципиально. Вам известен алгоритм соединения слиянием? Ваш алгоритм имеет трудоемкость O(N*log(M)), где N и M - количество записей в первой и второй таблицах соответственно. Слегка модифицировав алгоритм соединения слиянием, можно получить алгоритм трудоемкостью O(N+M), что при M сопоставимом или большем,чем N, дает значительно меньший рост. В моем втором алгоритме вторая таблица не присутствует вообще! И не путайте данные, которые уже отсортированы (проиндексированы) и которые еще предстоит отсортировать. Кстати, лучше алгоритма слиянием алгоритм естественным слиянием для частично (или полностью) упорядоченных записей. Для случайных записей – ультрафиолетово.Ваш второй алгоритм (кстати в его описании есть ошибка, приводящая к неверному результату, но заостряться на этом не будем) не является прямым аналогом исходного запроса, хотя бы потому, что требует модификации базы. И я ничего не путаю, оценку трудоемкости алгоритмов я делал исходя из оптимистичного случая, когда все необходимые индексы существуют, т.е. все что нужно - уже отсортировано. EmerymiksoftНет, там теоретические изыскания. А вы покажите аналог обсуждаемого запроса именно в операциях с DBF и CDX. В этой теме речь идет исключительно о концепции. Если будете следить за моей серией статей, то рано или поздно дождетесь реализации этой концепции в коде. Данный вопрос слишком объемный, чтобы раскрыть его с пол-пинка, miksoftВот и покажите "небольшой по объему код" без применения коммерческих движков и бесплатных библиотек. Со временем покажу, для того и затеял эту канитель с публикацией своих статей. Только для большинства это «напрасный» труд. Если вы тоже так считаете, тогда зачем ждать? :) Ну хотя бы из любопытства, чтобы увидеть как далеко может завести велосипедостроительство :) Только почему-то я уверен, что этот алгоритм будет верен и эффективен только в узком диапазоне внешних условий, значительно более узком, чем тот, в котором будет работоспособен и эффективен исходный запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2009, 18:17:06 |
|
||
|
Альтернатива SQL запросам
|
|||
|---|---|---|---|
|
#18+
Roman S. Golubinc127При 100 однвременно работающих с БД пользователях? А что, с базой данных может работать более одного пользователя???!!!! Нет конечно же, я пошутил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2009, 21:09:40 |
|
||
|
Альтернатива SQL запросам
|
|||
|---|---|---|---|
|
#18+
EmeryНет, не собираюсь. Есть в науке такой метод познания: «от простого к сложному» . Кроме того, что я программист, я еще исследователь программ . Мне важен не самописный клон чужой программы, а желание разобраться в концепции ее работы. Для этого совсем не обязательно моделировать ее 100% функционал. Достаточно смоделировать несколько ключевых процентов . Такому подходу, проникновению в суть вещей, я хочу научить других . А книги читать не пробовали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2009, 21:13:24 |
|
||
|
|

start [/forum/topic.php?fid=3&gotonew=1&tid=1291696]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
get settings: |
6ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
199ms |
get topic data: |
10ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 394ms |
| total: | 707ms |

| 0 / 0 |
