|
|
|
Rushmor в выражении WHERE SELECT-a
|
|||
|---|---|---|---|
|
#18+
ситуация: имеется таблица из нескольких числовых столбцов, по ним индекса нет, но есть составной индекс вида STR(pole1)+STR(pole2)+...STR(pole_n). после открытия таблицы используется составной индекс. делается выборка по таблице с условием: WHERE STR(pole1)+STR(pole1)==STR(m.a)+STR(m.b). на выходе - выборка. однако оптимизатор пишет, что индексы не используются. возможно ли вообще в такой ситуации использование оптимизатором индексов в select-е и каким образом можно построить соответствуюший запрос ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 11:31 |
|
||
|
Rushmor в выражении WHERE SELECT-a
|
|||
|---|---|---|---|
|
#18+
Код: plaintext Для того что бы такой индекс работал надо в условии поставить всё то что перечислено в индексе, либо создать для выборки по двум полям Код: plaintext отдельный индекс Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 12:22 |
|
||
|
Rushmor в выражении WHERE SELECT-a
|
|||
|---|---|---|---|
|
#18+
да уже пробовал по полному выражению условие - результат тот же: пишет, что не оптимизируется условие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 14:05 |
|
||
|
Rushmor в выражении WHERE SELECT-a
|
|||
|---|---|---|---|
|
#18+
Попробуй тест Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 14:25 |
|
||
|
Rushmor в выражении WHERE SELECT-a
|
|||
|---|---|---|---|
|
#18+
спасибо за тест ;-) , после перестройки индексов все работает(похоже какие-то проблемы были). получается что значение индексного ключа с неким сложным выражением используется оптимизатором только целиком и без вариантов (т.е. нет вариантов использования подобного индекса как составного индекса (в традиционном понимании-{pol1,pole2,...})) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 15:18 |
|
||
|
Rushmor в выражении WHERE SELECT-a
|
|||
|---|---|---|---|
|
#18+
f_userспасибо за тест ;-) , после перестройки индексов все работает(похоже какие-то проблемы были). получается что значение индексного ключа с неким сложным выражением используется оптимизатором только целиком и без вариантов (т.е. нет вариантов использования подобного индекса как составного индекса (в традиционном понимании-{pol1,pole2,...})) ? Правильно понимаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 15:23 |
|
||
|
Rushmor в выражении WHERE SELECT-a
|
|||
|---|---|---|---|
|
#18+
а вокруг, млин, одни грабли - не развернешся ... :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 15:39 |
|
||
|
Rushmor в выражении WHERE SELECT-a
|
|||
|---|---|---|---|
|
#18+
У кого-то в сигнатуре видел такое автор- обходя разложенные грабли, ты теряешь драгоценный опыт :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2006, 16:03 |
|
||
|
Rushmor в выражении WHERE SELECT-a
|
|||
|---|---|---|---|
|
#18+
Hi f_user! Два момента - в VFP9 без SP1 есть проблем с использованием STR() в индексах - такие индексы не используются оптимизатором (в SP1 это исправлено) Ну и наконец самое важное - фокс вполне может использовать лишь небольшой кусок из "длинного" текстового индекса - но лишь НАЧАЛЬНЫЙ его кусок, и лишь при условии текущей установки SET ANSI OFF - при этом конечно писать слева нужно полное условие индекса, а вот сравнивать вполне можно с более короткой строкой (т.е. просто игнорировать "дальние" части составного индекса). Ещё один хинт - используя BINTOC() можно весьма эффективно "упаковывать" целые числа, при этом конечно можно "сцеплять" несколько полей как и для STR() - это для больших таблиц даёт существенный выигрыш. Конечно есть и опасность - при использовании COLLATE # MACHINE сравнение бинарных данных будет некорректно. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2006, 02:31 |
|
||
|
Rushmor в выражении WHERE SELECT-a
|
|||
|---|---|---|---|
|
#18+
thanx за совет по поводу траблов в оптимизаторе. по поводу "длинных" индексов: а собственно у таких индексов похоже нет отличий от обычных индексов по строковым полям. или не совсем так ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 09:29 |
|
||
|
Rushmor в выражении WHERE SELECT-a
|
|||
|---|---|---|---|
|
#18+
Hi f_user! > по поводу "длинных" индексов: а собственно у таких индексов похоже нет > отличий от обычных индексов по строковым полям. или не совсем так ? Не уверен что понял тебя правильно... Просто чем "длиннее" индексное выражение, тем больше (в общем случае) индексный файл - значит медленнее будет работать (считай по сети 10Мб и 50Мб - есть же большая разница). Если есть возможность "урезать" размер индекса не повлияв конечно на его функциональность - то стоит попробовать... Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2006, 02:21 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33531880&tid=1592351]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
| others: | 232ms |
| total: | 376ms |

| 0 / 0 |
