powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запрос
12 сообщений из 12, страница 1 из 1
Запрос
    #32539056
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сколько должен выполняться такой запрос???
tab1 - 96000 записей
tab2 - 900 записей
tab3 - 160000 записей
tab1.kod1 - индекное (I)
tab2.kod2 - индекное (I)
tab3.kod1 - индекное (I)
tab3.kod2 - индекное (I)
tab3.kod3 - индекное (C[50])

Код: plaintext
1.
2.
3.
   sele tab3.*, tab1.kod3; tab1.naim as naim1, tab2.naim as naim2 
   from tab1, tab2, tab3 
   where tab1.kod1 = tab2.kod2 and tab2.kod2 = tab3.kod2 into dbf tab4;
   order by tab1.kod3

Этот запрос выполняется около 10 сек...
В результате 160000 записей... не долго ли... да еще и по индексным полям
Если я с других таблиц tab1, tab2, вытягиваю только имена...
...
Рейтинг: 0 / 0
Запрос
    #32539064
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опечатка в селекте правильно...
Код: plaintext
1.
2.
3.
   sele tab3.*, tab1.kod3; tab1.naim as naim1, tab2.naim as naim2 
   from tab1, tab2, tab3 
   where tab1.kod1 = tab3.kod1 and tab2.kod2 = tab3.kod2 into dbf tab4;
   order by tab1.kod3
...
Рейтинг: 0 / 0
Запрос
    #32539114
malec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй вместо
where tab1.kod1 = tab2.kod2 and tab2.kod2 = tab3.kod2

JOIN .....
...
Рейтинг: 0 / 0
Запрос
    #32539204
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, ты спросил! Скорость выполнения запроса зависит не только от факта оптимизации (проверяется по SYS(3054))

-) Сколько в твоих таблицах записей помеченных как удаленные?
-) Какова на момент выполнения запроса настройка SET DELETED
-) Какова на момент выполнения запроса настройка SET COLLATE и какое значение IDXCollate() для каждого из индексов
-) На момент выполнения запроса были ли уже открыты таблицы
-) На момент выполнения запроса было ли перемещение по записям таблиц-источников.
-) Сколько полей в таблице tab3.*, точнее, какой размер (в байтах) получается у итоговой таблицы
...
Рейтинг: 0 / 0
Запрос
    #32539265
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-) Сколько в твоих таблицах записей помеченных как удаленные?
-) Какова на момент выполнения запроса настройка SET DELETED
-) Какова на момент выполнения запроса настройка SET COLLATE и какое значение IDXCollate() для каждого из индексов
-) На момент выполнения запроса были ли уже открыты таблицы
-) На момент выполнения запроса было ли перемещение по записям таблиц-источников.
-) Сколько полей в таблице tab3.*, точнее, какой размер (в байтах) получается у итоговой таблицы


SET DELETED ON
SET COLLATE - я не ставлю...
IDXCollate() - для всех машина стоит
таблицы открыты
по ним не бегали
итоговый файл 50 Метров
...
Рейтинг: 0 / 0
Запрос
    #32539304
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если все-таки ответить на вопросы?

SET DELETED ON

так сколько (какой процент) записей помеченных как удаленные? Ведь их еще надо отсечь от результата

SET COLLATE - я не ставлю...
IDXCollate() - для всех машина стоит

Так стоит-то что?

итоговый файл 50 Метров

Считаешь, что 50 М должны создаваться быстрее, чем за 10 секунд? Так попробуй сделать цикл вроде

Код: plaintext
1.
2.
3.
4.
CREATE TABLE test (f1 C( 200 ), f2 C( 200 ), f3 C( 200 ), f4 C( 200 ), f5 C( 200 ))
* Т.е. одна строка примерно 1К
FOR i= 1  TO  50000 
INSERT INTO test (f1,f2,f3,f4,f5) VALUES (space( 200 ),space( 200 ),space( 200 ),space( 200 ),space( 200 ))
ENDFOR

Это фактически только голое создание таблицы объемом около 50М без учета времени обработки условий и пр.
...
Рейтинг: 0 / 0
Запрос
    #32539940
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ради интереса... Сделал такой цикл, добавив в начало и в конец "CLOSE ALL", чтоб по-честному ;-) Десять запусков - среднее время 1.25 сек. Компьютер, правда, хорош...
...
Рейтинг: 0 / 0
Запрос
    #32540787
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эт круто...
Единственная проблема запрос от этого быстрее работать не стал...
...
Рейтинг: 0 / 0
Запрос
    #32540848
VadimS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 select tab3.*, tab1.kod3; tab1.naim as naim1, tab2.naim as naim2 
  into dbf tab4
   from tab3
    Inner join  tab2
     On tab2.kod2 = tab3.kod2
    Inner join tab1
     On tab2.kod2=tab1.kod1
    Order by tab1.kod3
  
и если tab1.kod3 будет проиндексированно, то Order by будет быстрее отрабатывать.
Не знаю как в VFP, но в Microsoft Server работает быстрее
...
Рейтинг: 0 / 0
Запрос
    #32540924
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, поскольку ты так и не отвечаешь на заданные вопросы, то отправляю тебя читать статью

http://www.foxclub.ru/kb/index.php?sid=27700&aktion=artikel&rubrik=004&id=57&lang=ru

Там есть, кое что, на предмет использования индексов и как влияет то, о чем я спрашивал (но о чем ты так и не ответил) на скорость выборки.
...
Рейтинг: 0 / 0
Запрос
    #32540943
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ:

Просто я сегодня мертвый...
Башка просто не соображает...
...
Рейтинг: 0 / 0
Запрос
    #32540957
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VadimS:
Эт запрос еще дольше выполняется...
Я уже пробовал...

ВладимирМ:

Удаленных записей нет...

индексы:
type = regular
collate = machine
у всех...
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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