|
|
|
Гляньте код, что то долго он работает ???
|
|||
|---|---|---|---|
|
#18+
Всем привет пишу код следующего содержания SET DELETED ON SELECT * from table1 ; WHERE table1.ls=LnLs; into CURSOR cur_table1 readwrite SELECT cur_table1 INDEX ON STR(god,4)+STR(mes,2) TAG godmes INDEX ON god TAG god INDEX ON mes TAG mes SELECT * from cur_table1; WHERE cur_table1.god<LnGod OR cur_table1.god=LnGod AND cur_table1.mes<=LnMes) AND ; cur_table1.sis#0 AND cur_table1.post#0; into CURSOR cur_cur_table1_one READWRITE слишком долго выполняется, таблица сама весит примерно 1,8 Гига/байта записей в ней несколько сот тысяч выборка идет по лицевому счету, выполняется в течении 15-20 секунд, а если поставить на компьютер скажем 486, то вообще мрак, может кто посоветует чего ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2005, 13:30:46 |
|
||
|
Гляньте код, что то долго он работает ???
|
|||
|---|---|---|---|
|
#18+
МНастяВсем привет пишу код следующего содержания SET DELETED ON SELECT * from table1 ; WHERE table1.ls=LnLs; into CURSOR cur_table1 readwrite Таблица Table1 должна иметь индекс по полю table1.ls Причем IDXCollate() этого индекса должен совпадать с текущей настройкой SET COLLATE на момент выполнения запроса. Если конечной целью является получение курсора cur_cur_table1_one, а курсор cur_table1 вообще не нужен, то и нечего в данном случае его создавать. Зачем лишняя перекачка, особенно если в cur_table1 относительно много записей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2005, 13:42:51 |
|
||
|
Гляньте код, что то долго он работает ???
|
|||
|---|---|---|---|
|
#18+
Объедините вместе два селеста в один.но это большой прирост конечно не даст. И возвращайте не выборку всех полей а только тех что вам надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2005, 17:54:45 |
|
||
|
Гляньте код, что то долго он работает ???
|
|||
|---|---|---|---|
|
#18+
Я тут недавно поднимал вопрос о медленной работе Select - Мэтры много полезного посоветовали - почитайте я думаю проблема аналогична моей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2005, 08:20:05 |
|
||
|
Гляньте код, что то долго он работает ???
|
|||
|---|---|---|---|
|
#18+
Добавь индекс по deleted() Выражение OR - не оптимизируется Rashmor WHERE cur_table1.god<LnGod OR cur_table1.god=LnGod замени на WHERE cur_table1.god<=LnGod ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2005, 14:03:45 |
|
||
|
Гляньте код, что то долго он работает ???
|
|||
|---|---|---|---|
|
#18+
foxwizardДобавь индекс по deleted() Во-первых, это приведет к оптимизации только при наличии настройки SET DELETED ON. Во-вторых, в большинстве случаев, до версии VFP9 такой индекс не ускорит, а замедлит выполнение запроса. foxwizardВыражение OR - не оптимизируется Rashmor Оптимизируется. Но только в том случае, если оба выражения, объединенные через OR сами оптимизируются. Если одно из них не оптимизируется, то не оптимизируется и их объединение через OR. Кроме того, предложенная замена приведет к искажению результата запроса. Исходный запрос это: Код: plaintext 1. 2. Заменить эту конструкцию на (cur_table1.god<=LnGod) не представляется возможным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2005, 14:54:25 |
|
||
|
Гляньте код, что то долго он работает ???
|
|||
|---|---|---|---|
|
#18+
Маленькое дополнение для VFP 5, индекс по DELETED() в этой версии необходим, подробности http://forum.foxclub.ru/read.php?f=5&i=98845&t=98195 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2005, 15:22:21 |
|
||
|
Гляньте код, что то долго он работает ???
|
|||
|---|---|---|---|
|
#18+
Пардон, не обратил внимания на скобку WHERE cur_table1.god<LnGod OR cur_table1.god=LnGod AND cur_table1.mes<=LnMes) Кстати, открывающая скобка где? Структуру table1 в студию. С описанием полей . сколько записей в table1 и cur_table1 сколько после выборки по условию? А еще лучше - что нужно получить в результате из table1ю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2005, 06:30:53 |
|
||
|
Гляньте код, что то долго он работает ???
|
|||
|---|---|---|---|
|
#18+
А еще лучше - что нужно получить в результате из table1. Простым человеческим языком: Я хочу , чтоб из table1 в результат попали записи,которые ...... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2005, 06:36:39 |
|
||
|
Гляньте код, что то долго он работает ???
|
|||
|---|---|---|---|
|
#18+
Hi Владимир! > Кроме того, предложенная замена приведет к искажению результата запроса Да, но если и в самой таблице есть индекс по STR(god,4)+STR(mes,2) то вполне можно свести это условие к одному: STR(god, 4)+STR(mes, 2) <= STR(?m.LnGod, 4) + STR(?m.LnMes, 2) Или, что ещё лучше, посчитать предварительно значение STR(m.LnGod, 4) + STR(m.LnMes, 2) и использовать в запросе уже его результат. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2005, 03:49:27 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=286&tid=1592817]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 366ms |

| 0 / 0 |
