powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Почему Select медленно работает?
25 сообщений из 41, страница 1 из 2
Почему Select медленно работает?
    #39621172
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица Schet1 и ее копия scc1
выполняю:
SELECT kod, ugol FROM scc1 WHERE oper = '007001' AND !EMPTY(ugol) INTO CURSOR v3
время работы = 0
SELECT kod, ugol FROM schet1 WHERE oper = '007001' AND !EMPTY(ugol) INTO CURSOR v1
время работы=25сек.

Разница в таблицах - Schet1 входит в dbc, есть триггеры Insert, Update, Delete.
Таблица scc1 - свободная. Получена из Schet1 командой Copy to scc1
В обеих есть индекс Oper - key()='Oper'
Ориентировочное число записей 5 500 000. Выборка ~85 000.
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621179
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создание индекса и выполнение запроса при одинаковом collation ?

Что показывает
Код: sql
1.
sys(3054)
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621184
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamis,

1. Команда копирования должна быть такой
Код: sql
1.
Copy to scc1 with CDX


2. Нужен индекс не только на OPER, но и на !EMPTY(ugol).
Код: sql
1.
INDEX on !EMPTY(ugol) tag e_ugol binary


3. Создание индекса по строке (OPER) и выполнение запроса должны быть при одинаковых Collation.
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621185
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
sys(3054,12) для Schet1:

SELECT kod, ugol FROM schet1 WHERE oper = '007001' AND !EMPTY(ugol) INTO CURSOR v1

Using index tag Sql_oper to rushmore optimize table schet1
Rushmore optimization level for table schet1: partial

для scc1:

SELECT kod, ugol FROM scc1 WHERE oper = '007001' AND !EMPTY(ugol) INTO CURSOR v3

Using index tag Sql_oper to rushmore optimize table scc1
Rushmore optimization level for table scc1: partial
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621189
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Sizov,
Таблицы одинаковы, индексы тоже, а время работы в одном случае 0, в другом -25сек.
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621190
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamis,

забыл еще про set deleted. Если стоИт в on, то еще нужен индекс
Код: sql
1.
INDEX on Deleted() tag _del binary


И тогда можно будет увидеть Full вместо partial.
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621192
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть еще подозрение, что в копии записи отсортированы физически. Проверю только вечером.
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621193
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Sizov,
есть
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621195
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisSergey Sizov,
Таблицы одинаковы, индексы тоже, а время работы в одном случае 0, в другом -25сек.Еще раз - важны не только данные и выражения индексирования, но и Collation при СОЗДАНИИ индекса и при ВЫПОЛНЕНИИ запроса. Вы же индекс на вторую таблицу не скопировали (а могли, командой которую я показал)? Вы же его потОм сделали? Какой collation был непосредственно перед выдачей команды Index on... ? А какой при выполнении вашего запроса?
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621196
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisSergey Sizov,
естьЧто есть?
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621207
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisDima T,
sys(3054,12) для Schet1 ...
Разницы никакой, значит дело не в фоксе
glamisРазница в таблицах - Schet1 входит в dbc, есть триггеры Insert, Update, Delete.
Таблица scc1 - свободная. Получена из Schet1 командой Copy to scc1
В обеих есть индекс Oper - key()='Oper'
Ориентировочное число записей 5 500 000. Выборка ~85 000.
1. Триггеры ничем не мешают, т.к. выполняются только при изменении.
2. Если таблицы в сети и Schet1 используется несколькими пользователями, а scc1 только тобой, то после копирования scc1 даже находясь в сети все-равно закэшируется на твоем компе, т.е. по скорости будет как локальная.
Недавно эту тему поднимали
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621212
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Sizovно и Collation при СОЗДАНИИ индекса и при ВЫПОЛНЕНИИ запроса.
ИМХО Collation одинаковый, иначе рашмор просто не стал бы индекс использовать 21289919
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621215
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSergey Sizovно и Collation при СОЗДАНИИ индекса и при ВЫПОЛНЕНИИ запроса.
ИМХО Collation одинаковый, иначе рашмор просто не стал бы индекс использовать 21289919 Это справедливо для самой последней версии фокса. В предыдущих сервис паках было разное.
В любом случае предложенные мной индексы всяко не помешают.
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621232
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Sizov,
Индекс Delete()
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621237
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisSergey Sizov,
Индекс Delete()Однако, он не используется. Он точно Binary?
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621245
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Sizov,
set('collate') = MACHINE
cp Schet1 1251, cp ssc1 1251
fox Visual FoxPro 09.00.0000.5815 for Windows

Кроме того:
Select kod,ugol from Schet1 where oper = '007001' into cursor v4
0сек.
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621251
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey SizovglamisSergey Sizov,
Индекс Delete()Однако, он не используется. Он точно Binary?

Set delete не включено.

Эти примеры я выполняю на одной машине в commande, последовательно друг за другом. Среда fox одинакова.
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621252
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisfox Visual FoxPro 09.00.0000.5815 for WindowsНе самый последний. Обязательно обновить.[/quot]

Кроме того:
Select kod,ugol from Schet1 where oper = '007001' into cursor v4
0сек.[/quot]Ну так я ж не просто так про индекс по !Empty(ugol) писал. Как раз его отсутствие для Schet1 и показывает разницу в быстродействии для Schet1.
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621257
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisSergey Sizovпропущено...
Однако, он не используется. Он точно Binary?

Set delete не включено.

Эти примеры я выполняю на одной машине в commande, последовательно друг за другом. Среда fox одинакова.Отлично. Теперь надо добиться такого:

Select kod,ugol from Schet1 where oper = '007001' and !Empty(ugol)

Using index tag Sql_oper to rushmore optimize intermediate result
Using index tag E_ugol to rushmore optimize intermediate result
Rushmore optimization level for intermediate result: full
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621268
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Sizov,

Но из scc1 эта же выборка при той же структуре, с теми же индексами, с теми же данными копируется МГНОВЕННО.
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621272
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisSergey Sizov,

Но из scc1 эта же выборка при той же структуре, с теми же индексами, с теми же данными копируется МГНОВЕННО.Она может быть закэширована, она/ее индексы могут лежать в более "удобном" месте диска и т.д. Про одинаковые индексы можно говорить только при копировании этой таблицы вместе с индексами.
Вы собираетесь лечить пациента гаданиями? Или таки возьмёте на вооружение технические средства и пойдёте искать где собака порылась?
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621274
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisКроме того:
Select kod,ugol from Schet1 where oper = '007001' into cursor v4
0сек.
Это очень странно. Не могу придумать ни одного объяснения.

Если тут же после выполнить
Код: sql
1.
Select kod,ugol from Schet1 where oper = '007001' AND !EMPTY(ugol)  into cursor v4


точно тормозит? Может проблему уже нет?
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621282
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey SizovТеперь надо добиться такого:

Select kod,ugol from Schet1 where oper = '007001' and !Empty(ugol)

Using index tag Sql_oper to rushmore optimize intermediate result
Using index tag E_ugol to rushmore optimize intermediate result
Rushmore optimization level for intermediate result: full
ИМХО лучше не надо. Фокс все-равно возьмет какой-то один индекс в качестве основного и будет сначала выбирать по нему. Если этим индексом окажется E_ugol, то будет тормоз.

Если уж добиваться "full", то индексом по oper+ugol

PS "full" не означает что самый быстрый способ выбран.
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621288
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSergey SizovТеперь надо добиться такого:

пропущено...

ИМХО лучше не надо. Фокс все-равно возьмет какой-то один индекс в качестве основного и будет сначала выбирать по нему. Если этим индексом окажется E_ugol, то будет тормоз.

Если уж добиваться "full", то индексом по oper+ugol

PS "full" не означает что самый быстрый способ выбран.Сударь, вы думаете я это в текстовом редакторе написал? Вам показать код, который выводит сие сообщение? Извольте.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sys(3054, 12, '_cliptext')
Set Deleted Off
Create Cursor Schet1 (oper c(6), kod int, ugol int)
Index on oper tag sql_oper
Index on Empty(ugol) tag E_ugol binary
Select kod,ugol from Schet1 where oper = '007001'
Select kod,ugol from Schet1 where oper = '007001' and !Empty(ugol)
Clear All
Sys(3054,0)


Потом расскажете про использование только одного индекса.
...
Рейтинг: 0 / 0
Почему Select медленно работает?
    #39621289
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Sizov,

Мне теперь для каждой выборки строить свои индексы? В таблице около 30 полей и что, по каждому строить индекс?
Насчет кеширования - только что сбросил таблицу по сетке на другой ресурс, с другим именем и сделал выборку в другой сессии fox - МГНОВЕННО.
...
Рейтинг: 0 / 0
25 сообщений из 41, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Почему Select медленно работает?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]