|
Оптимизация SQL
|
|||
---|---|---|---|
#18+
Делаю выборку из таблицы: SELECT n_plat, s_ob,; 000000000.00 as s_opl; FROM c0203 INTO CURSOR _x1 WHERE sh_post = __sh AND data < _date; UNION ALL SELECT n_plat, 000000000.00 as s_ob, s_opl; FROM c0205 WHERE shifr = __sh AND data < _date в обеих таблицах есть таги: C0203 tag ShifrSQL - sh_post; tag DataSQL - data; С0205 tag ShifrSQL - shifr; tag DataSQL - data Количество записей в С0203 - 59000, C0205 - 104000. В выборке - 71 запись Время выборки 3,475с Для сравнения делаю программную выборку: CREATE CURSOR _x1 (n_plat C(6), s_ob N(15,2), s_opl N(15,2)) SELECT C0203 SEEK __sh SCAN WHILE sh_post = __sh FOR data < _date INSERT INTO _x1 (n_plat, s_ob) VALUES (C0203.n_plat, C0203.s_ob) Ends SELECT C0205 SEEK __sh SCAN WHILE shifr = __sh FOR data < _date INSERT INTO _x1 (n_plat, s_opl) VALUES (C0205.n_plat, C0205.s_opl) Ends время выборки 0,078с оптимизация Select идет по тегам DataSQL. Может можно заставить Select использовать по ShifrSQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2009, 16:52 |
|
Оптимизация SQL
|
|||
---|---|---|---|
#18+
Перед Select SET ORDER TO 0 для каждой из таблиц делали ? какой тип и размерность полей sh_pos и shifr ? откуда берется переменная __sh для условия , её тип и размерность совпадают с sh_pos и shifr ? Также проверьте каждую часть Uniona отдельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2009, 18:32 |
|
Оптимизация SQL
|
|||
---|---|---|---|
#18+
1. Версия FoxPro? 2. Текущая настройка SET COLLATE и IDXCollate() для тегов ShifrSQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2009, 20:35 |
|
Оптимизация SQL
|
|||
---|---|---|---|
#18+
Тестовая программа: CLOSE DATABASES all CLEAR USE \\Servdos\iola\ASUP21_debug\dbf\с02\C0203.DBF USE \\Servdos\iola\ASUP21_debug\dbf\с02\c0205.dbf IN 0 USE \\Servdos\iola\p49\dbf\p5101.dbf IN 0 USE \\Servdos\iola\p49\dbf\p5104.dbf IN 0 CREATE CURSOR Spisok1 (Data D, Nomer C(10), summa1 N(12,2), summa2 N(12,2), nado L) CREATE CURSOR Spisok2 (Data D, Nomer C(10), summa1 N(12,2), summa2 N(12,2), nado L) _date=DATE() && This.form2.one_dat1.data _sh='005325' __sh=SUBSTR(_sh,3) STORE SECONDS() TO seco, _seco, seco_ IF .t. SET ORDER TO =SYS(3054,12,'cmemv') SELECT n_plat, s_ob,; 000000000.00 as s_opl; FROM c0203 INTO CURSOR _x1 WHERE sh_post = __sh AND data < _date; UNION ALL SELECT n_plat, 000000000.00 as s_ob,; s_opl; FROM c0205 WHERE shifr = __sh AND data < _date ?1,SECONDS()-seco_ seco=SECONDS() ***************** C0203.sh_post C(4) C0205.shifr C(4) ************************ Разбивал Union на 3 части: 1-выборка из C0203, 2-выборка из C0205, 3-слияние время работы Union - 6.302с, разбитого на 3 части 6,598с. ******************************************************* Отчет об оптимизации запроса: SELECT n_plat, s_ob, 000000000.00 as s_opl FROM c0203 INTO CURSOR _x1 WHERE sh_post = __sh AND data < _date UNION ALL SELECT n_plat, 000000000.00 as s_ob, s_opl FROM c0205 WHERE shifr = __sh AND data < _date Using index tag Datasql to rushmore optimize table c0203 Rushmore optimization level for table c0203: partial Using index tag Datasql to rushmore optimize table c0205 Rushmore optimization level for table c0205: partial ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2009, 09:09 |
|
Оптимизация SQL
|
|||
---|---|---|---|
#18+
Проблема оказалась в том, что исходные таблицы в 866 странице. При этом SEt collate to RUSSIAN не помогло. Перевод в 1251 и set collate to MACHINE дало следующие результаты: 1. UNION 0.08с 2. 3 запроса 0,08с 3. Программная выборка 0.081с ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2009, 09:32 |
|
|
start [/forum/topic.php?fid=41&msg=36182822&tid=1586075]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 122ms |
0 / 0 |