Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизировать запрос, Вапрос чиста теаретический 
:(
    Опции темы
AlexLogos
Дата 29.12.2009, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



Доброго времени суток уважаемые профи. Хочу спросить у Вас совета так как я в Фоксе - "Дуб - дерево хвойное". Одним словом есть несколько таблиц в которых есть  нужные мне данные. Первые три запроса - это я формирую курсоры с промежуточными (уточняющими) данными, а последний - делаю выборку в результате которой получаю кучу строк))) Так вот вопрос в том что в таблице txt находиться 1.5 млн записей - выборка идет несколько минут. Как можна ускорить этот процес?
Код

SELECT txt.ni,txt.d_d FROM txt,words,ss WHERE txt.ni=ss.ni AND txt.d_d>=d2 AND txt.d_d<=d1 AND txt.tva like ALLTRIM(words.word) GROUP BY txt.ni,txt.d_d ORDER BY txt.ni INTO CURSOR c1
SELECT text as l_,kod FROM class WHERE klass=20 INTO CURSOR lin
SELECT text as l_ FROM class WHERE klass=10 AND kod=0 INTO CURSOR org
SELECT ss.ni,txt.tfi,txt.tdb,txt.tva,lin.l_,class.text,class.link1,ss.ss_,txt.d_d,txt.d_t FROM ss,txt,class,c1,lin WHERE txt.ni=ss.ni AND  txt.ni=c1.ni AND (class.kod=VAL(ALLTRIM(ss.sh_)) AND class.klass=10) AND VAL(ALLTRIM(ss.sb_))=lin.kod AND txt.d_d=c1.d_d ORDER BY ss.ni,txt.tdb,txt.tfi INTO CURSOR c2


 И еще - можно ли при выборке провести какие-либо действия с данными своей процедурой? Ну например написать

Код

SELECT MyProc(txt.ni) from txt


Это сообщение отредактировал(а) AlexLogos - 29.12.2009, 19:17
PM MAIL   Вверх
Cashey
Дата 30.12.2009, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 13
Всего: 60



посмотрите что возвратит SYS(3054)


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
AlexLogos
Дата 30.12.2009, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



? SYS(3054) возвращает 0. А что это за функция? Возвращает системное значение чего?(если я правильно понял)
PM MAIL   Вверх
Данкинг
Дата 30.12.2009, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 7
Всего: 130



Цитата(AlexLogos @  30.12.2009,  13:00 Найти цитируемый пост)
А что это за функция?

В справке по фоксу найди. Возвращает уровень оптимизации.



Это сообщение отредактировал(а) Данкинг - 30.12.2009, 14:30


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
AlexLogos
Дата 30.12.2009, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



А как его повысить?
PM MAIL   Вверх
Данкинг
Дата 30.12.2009, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 7
Всего: 130



Цитата(AlexLogos @  29.12.2009,  18:54 Найти цитируемый пост)
И еще - можно ли при выборке провести какие-либо действия с данными своей процедурой?

Можно, т.е.
Код

select myproc(pole) from dbf()


Цитата(AlexLogos @  30.12.2009,  15:00 Найти цитируемый пост)
А как его повысить? 

Снова-таки, посмотри справку (set rushmore...): я в это не вникал особо, так как не было необходимости.

Это сообщение отредактировал(а) Данкинг - 30.12.2009, 16:50


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
AlexLogos
Дата 30.12.2009, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



Спасибо посмотрю.
PM MAIL   Вверх
Cashey
Дата 31.12.2009, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 13
Всего: 60



Цитата(AlexLogos @  30.12.2009,  14:00 Найти цитируемый пост)
 SYS(3054) возвращает 0

функцию запускать надо сразу после отработки запроса

Добавлено через 2 минуты и 44 секунды
Цитата(AlexLogos @  30.12.2009,  16:00 Найти цитируемый пост)
А как его повысить?

исключи декартово произведение из запроса (если оно есть), сделай индексы по ключевым полям, бинарный индекс на deleted


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
AlexLogos
Дата 31.12.2009, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



Цитата

Цитата(AlexLogos @  30.12.2009,  14:00 )
 SYS(3054) возвращает 0


функцию запускать надо сразу после отработки запроса


так и делаю.

Цитата

бинарный индекс на deleted


это как?
PM MAIL   Вверх
Cashey
Дата 11.1.2010, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 13
Всего: 60



Цитата(AlexLogos @  31.12.2009,  11:20 Найти цитируемый пост)
Цитатабинарный индекс на deletedэто как?

Код
INDEX on DELETED() TAG deleted BINARY



--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
gorev
Дата 5.2.2010, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 5.2.2010

Репутация: нет
Всего: нет



Цитата

SELECT txt.ni,txt.d_d FROM txt,words,ss WHERE txt.ni=ss.ni AND txt.d_d>=d2 AND txt.d_d<=d1 AND txt.tva like ALLTRIM(words.word) GROUP BY txt.ni,txt.d_d ORDER BY txt.ni INTO CURSOR c1


упростить запрос, для этого разбить запрос на три части: 
1. txt.d_d>=d2 AND txt.d_d<=d1
2. txt.ni=ss.ni
3. txt.tva like ALLTRIM(words.word)

чем меньше результат первого по количеству записей, тем быстрее отработает следующий!

создать индекс по используемым полям d_d, ni, tva!
PM MAIL   Вверх
AlexLogos
Дата 16.3.2010, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



Спасибо, товарищи, указали на некоторые особенности работы!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Foxpro/Clipper/Dbase"
MoLeX

Запрещается!

1. Публиковать ссылки для чисто рекламных целей.

2. Оффтопить, флеймить, говорить не культурно.

Пожалуйста, адекватно задавайте свой вопрос. Тема должна создаваться с названием характеризующем Вашу проблему.

Задавайте вопросы правильно - как спросите, так вам и ответят.

Разрешено!

Давать ссылки на статьи, обзоры, если это не нарушает первый пункт правил.

Задавая вопрос, давайте нужную информацию касающуюся Вашей проблемы. Этим вы ускорите полезные ответы.

P.S. Размещение рекламы будет строго наказываться!



Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MoLeX

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Foxpro/Clipper/Dbase | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.