Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
SET FILTER TO
|
|||
|---|---|---|---|
|
#18+
Привет! Из опыта кто может подсказать? Сеть 10/100 Mb в таблице около 400000 записей, пользователей около 30. Если поставить эту команду, чтобы каждый пользователь обрабатывал свои записи, скажется ли такая организация доступа к данным на скорость работы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2003, 14:21 |
|
||
|
SET FILTER TO
|
|||
|---|---|---|---|
|
#18+
Из опыта - если в фильтруемой таблице более 2000 записей, тормоза будут очень даже заметны. Надо по возможности использовать set key to или выборку в курсор по условию фильтрования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2003, 14:27 |
|
||
|
SET FILTER TO
|
|||
|---|---|---|---|
|
#18+
Вообще-то если есть по выражению фильтра есть индекс set filter работает довольно шустро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2003, 14:33 |
|
||
|
SET FILTER TO
|
|||
|---|---|---|---|
|
#18+
авторВообще-то если есть по выражению фильтра есть индекс set filter работает довольно шустро. Вообще-то шустро... Если использовать потом эту таблицу для SCAN, или ещё какой позаписной обработки... Да и то SKIP - 1 перед первой и SKIP 1 после последней будут весьма медленными (особливо если сама выборка идёт в середине таблицы) И хорошие такие тормоза, если эту же таблицу отображать в гриде :) WBR, Igor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2003, 14:07 |
|
||
|
SET FILTER TO
|
|||
|---|---|---|---|
|
#18+
Там кажется еще на вставках тормоза. Я фильтром пользуюсь только для фильтрации небольшого количества локальных данных. Курсора например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2003, 15:33 |
|
||
|
SET FILTER TO
|
|||
|---|---|---|---|
|
#18+
Лучше делать выборку в курсор Select pole1, pole2, ... , polen from table where условие into cursor имя курсора Конечно упроститься если данные надо только просмотривать, если же их надо редактировать и/или добавлять и/или удалять, то придеться ещё кучу всего прописывать, но все можно сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2003, 09:00 |
|
||
|
SET FILTER TO
|
|||
|---|---|---|---|
|
#18+
Не знаю как в вижуал, а в досовском такие вещи на фильтре делать нельзя. Создай индексы по ключевым полям и используй при выборке конструкции имеющие в команде слово for. Тогда вборка проходит моментально. В хелпе фокса об этом подробно описано, технология называлась вроде rushmore. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 08:57 |
|
||
|
SET FILTER TO
|
|||
|---|---|---|---|
|
#18+
Нормально будет работать, если правильно установить фильтр В таблицу надо добавить поле типа логическое (Flt L) При установке фильтра, сначала пробежаться по всей таблице и установить значение этого поля по вычисляемому условию фильтра, а затем просто SET FILTER TO (Flt) и вполне шустро бегает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 09:40 |
|
||
|
SET FILTER TO
|
|||
|---|---|---|---|
|
#18+
2Дмитрий 1. Это решение не для многопользовательской среды. 2. Будет затрачено время на модификацию (и еще ого-го какое!) - а оно надо? 3. Тормозов в некоторых случаях (см. пост Igor) все равно не избежать. 4. Я, конечно, не против наличия метаданных, но это поле к таковым отнести нельзя. К данным - тем более. Стало быть, хранить его в таблице - неоправданная роскошь. 5. Как собираешься делать вещи типа requery (обеспечивать дальнейшую связь этого поля с полями, которые для него являются источниками данных)? Извини за критику, конечно, но твое решение иначе как извратом не назовешь. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 11:49 |
|
||
|
SET FILTER TO
|
|||
|---|---|---|---|
|
#18+
To: karpi А что Вы подразумеваете под "обработкой записей"? Если получение отчетов - то наличие индекса, как было сказано на скорости практически не скажется... Ну а если что-то смотреть, то все-равно больше 40 на экран не выведешь... лучше поступить, как подскзал AngelOKES. Хотя и простой фильтр работает быстро, но лучше все-таки SQL запрос или cursor adapter... Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 23:27 |
|
||
|
SET FILTER TO
|
|||
|---|---|---|---|
|
#18+
Однозначно фильтр использовать нельзя! Однозначно SET KEY проблемы не снимает. Проблема возникает когда кто-то модифицирует записи - остальные получат сообщение Record Not Aviable и на какой-то миг все повиснет... 400000 записей *30 пользователей - это уже перебор для таких инструкций. Решение - либо AngelOkes+Sergey Ch, либо другое, но медленное... :) (Либо разрезать таблицу на две: архив и оперативную, но это уже другая история...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2004, 10:45 |
|
||
|
SET FILTER TO
|
|||
|---|---|---|---|
|
#18+
Все еще хуже.... Просмотрел свой старый код, где как раз около 800000 записей в таблицах было... Так вот я там не пользовался SELECTом, а делал просто DO WHILE .t. if условие scatter memvar into array ... insert into временная from array... endif SKIP enddo И уже временную просматривал и т.п. - значит SELECT медленней работал... Ну в задачке правда и полей было 56! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2004, 07:33 |
|
||
|
SET FILTER TO
|
|||
|---|---|---|---|
|
#18+
>И уже временную просматривал и т.п. - значит SELECT медленней работал... Ну в задачке правда и полей было 56! Вот это да - высокоуровневая конструкция работает быстрее сишного кода. Уверен, либо бы не знали в то время о селекте, либо "не умели его готовить":) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2004, 11:13 |
|
||
|
SET FILTER TO
|
|||
|---|---|---|---|
|
#18+
Я подумал, прежде чем писать, но факт остается фактом... Там есть (на больших таблицах) какие-то подводные камни... SELECT даже полностью оптимизированный РАШМОРОМ работал не быстрее SEEK - DO WHILE, а держать кучу индексов было нельзя (изменения в таблице проходили очень медленно), так что при частично оптимизированном запросе или неоптимизированном вообще все как бы висло на черезчур долгое время... Хотя это был Fox 2.6, сеть 10-тка, сервер P-150MMX... может что и изменилось, сейчас проверить не могу - просто предупредил... программеров больших таблиц. Успехов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2004, 12:46 |
|
||
|
SET FILTER TO
|
|||
|---|---|---|---|
|
#18+
2 MaestroEv: >Там есть (на больших таблицах) какие-то подводные камни... Это не аргумент. Для начала их надо перечислить. >SELECT даже полностью оптимизированный РАШМОРОМ работал не быстрее SEEK - DO WHILE, Не верю, честно, не верю. Тест в качестве доказательства можете представить? >Хотя это был Fox 2.6, сеть 10-тка, сервер P-150MMX... может что и изменилось, сейчас проверить не могу - просто предупредил... программеров больших таблиц. О чем предупредили? Подводные камни в студию. >Успехов. Взаимно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2004, 13:00 |
|
||
|
SET FILTER TO
|
|||
|---|---|---|---|
|
#18+
>SELECT даже полностью оптимизированный РАШМОРОМ работал не быстрее SEEK - DO WHILE, Не верю, честно, не верю. Тест в качестве доказательства можете представить? Я то же могу подтвердить, что SEEK + WHILE на больших таблицах, работает быстее, чем Select. На личном опыте убеждался не однократно. Тест предоставить? А куда вам скинуть 60МВ табличку для теста? :) Хотя в примере MaestroEv, я бы использовал не Do while .T. if ... insert into временная ... а Seek(...) Copy to временная while ... -так будет еще быстрее. Но любой из этих вариантов все равно лучше, чем SET Filter, тем более, что со временем, я думаю, увеличатся и число записей и число пользователей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2004, 14:08 |
|
||
|
SET FILTER TO
|
|||
|---|---|---|---|
|
#18+
Да, насчёт DO WHILE .T. + IF внутри - это очень не карашо :( В смысле мендленно. А вот SEEK() + SCAN WHILE , или SEEK() + DO WHILE с_правильным_условием конечно будут быстрее SELECT-а. Ибо как бы ни был быстро сишный код, но всё-же ручная оптимизация получше будет нежели автоматическая :) Совсем иной вопрос, что писать всю оптимизацию вручную - это тот ещё геморр. Ну и естественно прежде чем заниматься ручной оптимизацией следует подумать, создать индексы, перестроить SELECT SQL чтоб он использовал эти индексы и проверить скорость. Ибо выигрыш может оказаться не столь и большим, чтоб заморачиваться. WBR, Igor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2004, 14:43 |
|
||
|
SET FILTER TO
|
|||
|---|---|---|---|
|
#18+
2 andrew_Pr: >Я то же могу подтвердить, что SEEK + WHILE на больших таблицах, работает быстее, чем Select. На личном опыте убеждался не однократно. Тест предоставить? А куда вам скинуть 60МВ табличку для теста? :) Помилуйте, барин, зачем же мне ваши 60Mb? У меня своих предостаточно.:) 2 Igor Korolyov > А вот SEEK() + SCAN WHILE , или SEEK() + DO WHILE с_правильным_условием Хорошо поиграем в игру "а что у вас?": 1) Генерируем таблицу Код: plaintext 1. 2. 3. 4. 5. 6. 7. После генерации у меня получилась DBF 53Mb + CDX около 7 MB. Разместил таблицу на сервере. 2) Пишем синтетический тест: Код: 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 3) На выходе получаем log.txt (450 Пень, 128 Mb, Сетка 10Mb/sec): NUM BETWEEN 599652426 AND 1777539394 SEEK + DO WHILE 0 117.715 219448 SELECT 0 37.771 219448 SEEK + DO WHILE 1 90.627 219448 SELECT 1 48.857 219448 SEEK + DO WHILE 2 94.953 219448 SELECT 2 45.858 219448 SEEK + DO WHILE 3 97.617 219448 SELECT 3 46.449 219448 4) Отбрасываем самую лучшую и самую худшую разницу. По-моему, что-то не то с SEEK+DO WHILE, а у Вас? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2004, 16:16 |
|
||
|
SET FILTER TO
|
|||
|---|---|---|---|
|
#18+
>MaestroEv >Проблема возникает когда кто-то модифицирует записи - остальные получат >сообщение Record Not Aviable и на какой-то миг все повиснет... А можно подробнее о такой ситуации? Похоже у меня такая проблема. Записи отбираются по SET FILTER. На одой из машин (единственной на 10 МБ) пару раз в день вылетает: RECORD OUT RANGE. Я никак не могу отловить причину. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2004, 22:35 |
|
||
|
SET FILTER TO
|
|||
|---|---|---|---|
|
#18+
To: Анатолий Широков У меня аналогично на больших таблицах и медленной сети получалось seek+do while быстрее :) Лично я это связывал с тем, что при больших базах данных работа происходит с диском, а не с кэшем... Ну а Ваш пример не показателен - отобрать 200000 записей в таблицу, конечно-же будет быстрее с помощью команды select :) Надеюсь, Вы поняли почему... Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2004, 23:20 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32384269&tid=1597285]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
127ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 433ms |

| 0 / 0 |
