powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Производительность запроса.
4 сообщений из 4, страница 1 из 1
Производительность запроса.
    #38929995
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе утро!
Коллеги, помогите советом.
В первый раз просто написал запрос, скорость не устроила.
Сейчас(см. ниже), вынес в отдельные две временные таблицы, чтобы не "таскать" лишние колонки по запросу.
Скорость не улучшилась, может даже стала хуже.
Что можно сделать? Как улучшить производительность?
Спасибо!

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
SELECT a.nskv, b.X, b.Y ;
  FROM abddobg a ;
       INNER JOIN abdadr b ON b.nskv = a.nskv ;
INTO DBF temp1 READWRITE 

select a.nskv, b.X, b.Y ;
  FROM abdzak a ;
       INNER JOIN abdadr b ON b.nskv = a.nskv ;
INTO DBF temp2 READWRITE 

SELECT a.nskv, c.nskv ;
  FROM temp1 a ;
       INNER JOIN temp2 c ON SQRT((c.X-a.X)*(c.X-a.X) + (c.Y-a.Y)*(c.Y-a.Y)) < VAL(ThisForm.Text1.Value) ;
INTO CURSOR myCursor


ThisForm.Grid1.RecordSourceType = 1 
ThisForm.Grid1.RecordSource = 'myCursor'
ThisForm.Grid1.Refresh 


TRY 
	DROP TABLE temp1
	DROP TABLE temp2
CATCH TO oException
ENDTRY
...
Рейтинг: 0 / 0
Производительность запроса.
    #38930057
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как понимаю надо выбрать все отрезки длиной менее ThisForm.Text1.Value

Такой запрос не оптимизируется. Не заточен SQL для алгоритмических задач. Идет перебор всех вариантов.
По сколько записей в таблицах temp1 и temp2? Их произведение это перебираемое количество вариантов.

Немного соптимизировать можно следующее:
1. Избавься от лишних вычислений. Не пиши VAL(ThisForm.Text1.Value), а сначала сохрани в переменную и замени корень на квадрат
Код: sql
1.
2.
lnLen2 = VAL(ThisForm.Text1.Value) * VAL(ThisForm.Text1.Value)
... (c.X-a.X)*(c.X-a.X) + (c.Y-a.Y)*(c.Y-a.Y) < lnLen2


2. Сначала выкинь отрезки заведомо длиннее нужного
Код: sql
1.
2.
lnLen = VAL(ThisForm.Text1.Value)
... abs(c.X-a.X) > lnLen or abs(c.Y-a.Y) > lnLen


тут можно попробовать добиться использования индексов.

PS По хорошему надо алгоритмы соответствующие искать, думаю математики что-нибудь быстрое изобрели для похожих задач.
...
Рейтинг: 0 / 0
Производительность запроса.
    #38930069
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо так делать:
Код: sql
1.
2.
3.
select ... INTO DBF temp1 READWRITE 
...
DROP TABLE temp1


Для это есть курсоры. Тоже самое:
Код: sql
1.
2.
3.
select ... INTO CURSOR temp1 READWRITE 
...
use in temp1
...
Рейтинг: 0 / 0
Производительность запроса.
    #38930178
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Спасибо!
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Производительность запроса.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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