|
|
|
SET KEY и SCAN
|
|||
|---|---|---|---|
|
#18+
Добрый день! Установил выборку данных по SET KEY с условием. Затем делаю SCAN по выбранным записям, при этом происходит то, что SCAN осуществляется по всем записям таблицы а не по выбранным, что существенно замедляет работу. Можно ли решить эту проблему? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2008, 09:43 |
|
||
|
SET KEY и SCAN
|
|||
|---|---|---|---|
|
#18+
SET KEY для этого не нужен. Можно так Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2008, 11:05 |
|
||
|
SET KEY и SCAN
|
|||
|---|---|---|---|
|
#18+
Опять же про Рашмора. Вы как раз должны отключить индекс, который помогает оптимизировать Ваше условие и тогда в SCAN можно задать условие FOR и будет работать быстро. Если подходящего индекса нет и Вы не хотите его создавать - пользуйтесь операторами SELECT-SQL и FoxPro создаст временные индексы за Вас и максимально оптимизирует запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2008, 18:31 |
|
||
|
SET KEY и SCAN
|
|||
|---|---|---|---|
|
#18+
apapacyОпять же про Рашмора. Вы как раз должны отключить индекс, который помогает оптимизировать Ваше условие и тогда в SCAN можно задать условие FOR и будет работать быстро. Если подходящего индекса нет и Вы не хотите его создавать - пользуйтесь операторами SELECT-SQL и FoxPro создаст временные индексы за Вас и максимально оптимизирует запрос. Зачем пытаться заставить работать оптимизатор косвенными методами когда есть простой способ явно написать оптимальный код? SCAN WHILE ... начнет с текущей записи и остановится на первой не удовлетворяющей условию. Те будет прочитано на одну запись больше чем требует выборка. Если использован SET KEY - значит индекс по нужному полю есть и включен. SELECT в данном случае вероятно быстрее всего отработает если таблица открыта не монопольно. Но если требуется изменение исходной таблицы, то SELECT отпадает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2008, 19:02 |
|
||
|
SET KEY и SCAN
|
|||
|---|---|---|---|
|
#18+
автор Вы не хотите его создавать - пользуйтесь операторами SELECT-SQL и FoxPro создаст временные индексы за Вас и максимально оптимизирует запрос. что-то новое, из серии фантастики советую автору, запостившему эту чушь, еще разок почитать на тему оптим-и запросов в фокспро при вып-и запросов фокс сам ничего не опт-ет, а включает опт-ю как раз при нал-и треб-х индексов и вып-и ряда условий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2008, 20:59 |
|
||
|
SET KEY и SCAN
|
|||
|---|---|---|---|
|
#18+
Прочитал и Вам рекомендую Using Rushmore Query Optimization with Tables Use Rushmore to optimize data access according to the number of tables involved. When you access single tables, you can take advantage of Rushmore anywhere that a FOR clause appears. When you access multiple tables, SELECT - SQL queries supersede all Rushmore optimizations. In an SQL command, Visual FoxPro decides what is needed to optimize a query and does the work for you. You don't need to open tables or indexes. If SQL decides it needs indexes, it creates temporary indexes for its own use . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2008, 21:21 |
|
||
|
SET KEY и SCAN
|
|||
|---|---|---|---|
|
#18+
Но вы не комплексуйте, прошелмимо. Я б сам этого не знал, если бы в FoxPro/Lan2.0(DOS) документации этому не было посвящено не один абзац, а парочка глав. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2008, 21:25 |
|
||
|
SET KEY и SCAN
|
|||
|---|---|---|---|
|
#18+
И дополню вышеответивших авторов: в случае применения scan for - отключайте индекс, тогда будет работать оптимизация. комбинация set index + seek+scan while - даст не меньшую скорость. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2008, 22:30 |
|
||
|
SET KEY и SCAN
|
|||
|---|---|---|---|
|
#18+
stivap ... и все-таки, возвращаясь к первому сообщению в теме... автор неправ.... у него просто что-то не так.... фрагмента текста не мешало бы приложить... SET KEY TO + SCAN все должно отлично работать!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2008, 08:57 |
|
||
|
SET KEY и SCAN
|
|||
|---|---|---|---|
|
#18+
2apapacy Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2008, 09:35 |
|
||
|
SET KEY и SCAN
|
|||
|---|---|---|---|
|
#18+
2apapacy автор Но вы не комплексуйте Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. возможно натолкнет на мысль ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2008, 10:01 |
|
||
|
SET KEY и SCAN
|
|||
|---|---|---|---|
|
#18+
apapacyПрочитал и Вам рекомендую Using Rushmore Query Optimization with Tables Use Rushmore to optimize data access according to the number of tables involved. When you access single tables, you can take advantage of Rushmore anywhere that a FOR clause appears. When you access multiple tables, SELECT - SQL queries supersede all Rushmore optimizations. In an SQL command, Visual FoxPro decides what is needed to optimize a query and does the work for you. You don't need to open tables or indexes. If SQL decides it needs indexes, it creates temporary indexes for its own use . (VFP9 Help) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2008, 19:15 |
|
||
|
SET KEY и SCAN
|
|||
|---|---|---|---|
|
#18+
Если бы Вы внимательнее читали Help, то знали бы уже,что SYS(3054, 11) Issue SYS(3054, 11) to display the Rushmore join optimization level after a query is executed. The optimization level is displayed in the active window И где ж Ваш JOIN. А о том, что SELECT-SQL работает с оптимизацией я неоднократно убеждался при работе на 286 процессорах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2008, 20:03 |
|
||
|
SET KEY и SCAN
|
|||
|---|---|---|---|
|
#18+
ну что в лоб, что по-лбу выполните пример 2-мя постами выше затем создайте индекс и снова выполните посмотрите что изменилось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2008, 20:29 |
|
||
|
SET KEY и SCAN
|
|||
|---|---|---|---|
|
#18+
Тут уж прийдется цитировать себя, люибимого: Я (только вчера) Если подходящего индекса нет и Вы не хотите его создавать - пользуйтесь операторами SELECT-SQL и FoxPro создаст временные индексы за Вас и максимально оптимизирует запрос. Что непонятно Вам? Пишите. Если подходящего индекса нет и Вы не хотите его создавать пользуйтесь операторами SELECT-SQL и FoxPro создаст временные индексы за Вас Тут все, надеюсь, понимают что с индексами будет быстрее. Но если индексов нет. То оператор SCAN FOR / REPLACE FOR будет работать медленнее,чем SELECT WHERE / UPDATE WHERE. Где я допустил неточность. Скажите. Еще раз. Если нет подходящего индекса и Вы не хотите его создавать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2008, 21:26 |
|
||
|
SET KEY и SCAN
|
|||
|---|---|---|---|
|
#18+
То оператор SCAN FOR / REPLACE FOR будет работать медленнее,чем SELECT WHERE / UPDATE WHERE. Я, честно говоря, спец. литру по этому вопросу не читал, но могу точно сказать, что для построения индкса нужно считать значения полей, входящих в индексное выражение. После пострить индекс и только потом уже выбирать по индексу. В случае со сканом просто считать значения полей, входящих в выражение условия, и сразу применить или не применить необходимые действия. Так что, ИМХО, если по условиям необходимо выполнить один прогон, то скан будет быстрее. Если же по тем же условиям надо будет выполнить пакет действий (грубо говоря сделать два и более прогонов по базе), то тогда, возможно, есть смысл тратить время на неявное создание временных индексов и , соответсвенно, использовать select, update... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2008, 07:15 |
|
||
|
SET KEY и SCAN
|
|||
|---|---|---|---|
|
#18+
авторТут уж прийдется цитировать себя, люибимого: Ваша манера общения напоминает спеца из КейСистемс. Очень не хочется Вас провоцировать, т.к. Вас несет ...., но Очень хочется процитировать Киркорова, но сдержусь. Общаться с Вами мне очень неприятно. Ваши советы из серии вредных: 1. неоптимальны 2. приводят к ошиб-м рез-там при опред.условиях. Писать статью сюда я не буду, мне Вас переуб-ть не интересно. Советую Вам еще раз прочитать рук-во по теме "Понимание..." наискосок. Если Вы желаете доказать свою правоту, то пожалуйста продемонстрируйте неск-ко примеров (код фокспро) ... Словесного поноса больше не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2008, 09:03 |
|
||
|
SET KEY и SCAN
|
|||
|---|---|---|---|
|
#18+
apapacyГде я допустил неточность. Скажите. Я объясню за Александра. Хорошо? Да, FoxPro может создать временные индексы. Но Вы пропустили ключевое слово - если необходимо . Т.е. может создать, но может и НЕ создать. В зависимости от запроса. Как правило, необходимость во временных индексах возникает в сложных коррелированных запросах. Когда уже из синтаксиса запроса ясно, что придется многократно выполнять сканирование одних и тех же данных. Т.е. временный индекс создается тогда, когда из анализа запроса следует, что время, потраченное на его построение будет меньше, чем многократное сканирование без него. Но это лишь мое предположение. Функция SYS(3054) явно укажет был создан временный индекс или нет. На простых запросах, как в данном случае, временные индексы не создаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2008, 22:48 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=35083741&tid=1588246]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
52ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 337ms |

| 0 / 0 |
