Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Строить ли индексы для ускорения работы Select-ов  [new]
Владимир СА
Member

Откуда:
Сообщений: 7882
Нужно ли строить индексы для ускорения работы Select-ов???
У меня в разых БД лежит информация. В моих рабочих БД конечно информации мало. У заказчика информации будет больше и нарастать. Вот примерный код для получения данных с которыми необходимо будет работать. Хотя при получении промежуточных данных использую ORDER BY, но может быть необходимо все таки построить временные индексы для ускорения получения информации по SELECT...
CLOSE TABLES all
USE settings IN 0
************
lc_DSN = ALLTRIM(Settings.Sql_dsn)
gncn_sql = SQLSTRINGCONNECT(m.lc_DSN)	&& Соединение с SQLSERVER

= SQLEXEC(gncn_sql, "SELECT ind.kod_indic, LEFT(ind.SectCode,30) as SectCode, LEFT(ind.varmnem,30) as varmnem "+;
                    "FROM EC_INDICATORS_SPR ind "+;
                    "WHERE Tbl_source = 'IIS_QUERI_V_Descns' AND SectCode <> 'zzzz' "+;
                    "ORDER BY 2, 3",;
                    "Q_EC_INDICATORS_SPR")

= SQLEXEC(gncn_sql, "SELECT terr.kod_terr, LEFT(terr.crcode,30) as crcode "+;
                    "FROM TERR_SPR terr ORDER BY 2", "Q_TERR_SPR")

= SQLDISCONNECT(gncn_sql)		&& ***************************

lc_DSN = ALLTRIM(Settings.Mdb_dsn)
gncn_mdb = SQLSTRINGCONNECT(m.lc_DSN)	&& Соединение с Первой Базой Access

= SQLEXEC(gncn_mdb, "SELECT DISTINCT VarMnem FROM IIS_QUERI_V_Descns WHERE TradeCode = True "+;
                    "ORDER BY VarMnem", "Q_IIS_QUERI_V_Descns")
= SQLEXEC(gncn_mdb, "SELECT DISTINCT SectCode FROM IIS_QUERI_Sect_Descns "+;
                       "WHERE TradeCode = True AND SectCode <> 'zzzz' ORDER BY SectCode", ;
                       "Q_IIS_QUERI_Sect_Descns")
= SQLEXEC(gncn_mdb, "SELECT CrCode FROM CRClass WHERE IISQueri > 0 ORDER BY CrCode", "Q_CRClass")

= SQLDISCONNECT(gncn_mdb)		&& ***************************

lc_DSN = ALLTRIM(Settings.Mdb_dsn)
lc_DSN = STRTRAN(lc_DSN, 'OEFDATA', 'QUERIDATA')
gncn_mdb1 = SQLSTRINGCONNECT(m.lc_DSN)		&& Соединение со Второй Базой Access

= SQLEXEC(gncn_mdb1, "SELECT * FROM QueriData ORDER BY CrCode, ComCode, VarMnem", "Q_QueriData")

= SQLDISCONNECT(gncn_mdb1)		&& ***************************

SELECT Q_TERR_SPR.* ;
  FROM Q_TERR_SPR INNER JOIN Q_CRClass ;
    ON Q_TERR_SPR.CrCode = Q_CRClass.CrCode ;
  ORDER BY Q_TERR_SPR.CrCode ;
  INTO CURSOR C_TERR_SPR

USE IN Q_TERR_SPR
USE IN Q_CRClass

SELECT I.* ;
  FROM Q_EC_INDICATORS_SPR I ;
    INNER JOIN Q_IIS_QUERI_Sect_Descns S ;
       ON I.SectCode = S.SectCode ;
    INNER JOIN Q_IIS_QUERI_V_Descns V ;
       ON I.VarMnem = V.VarMnem ;
  ORDER BY I.SectCode, I.VarMnem ;
  INTO CURSOR C_ind

USE IN Q_EC_INDICATORS_SPR
USE IN Q_IIS_QUERI_Sect_Descns
USE IN Q_IIS_QUERI_V_Descns

SELECT D.*, T.Kod_terr, I.Kod_indic ;
  FROM Q_QueriData D ;
    INNER JOIN C_TERR_SPR T ;
        ON D.CrCode = T.CrCode ;
    INNER JOIN C_ind I ;
        ON D.ComCode = I.SectCode ;
          AND D.VarMnem = I.VarMnem ;
  ORDER BY D.CrCode, D.ComCode, D.VarMnem ;
  INTO CURSOR C_QueriData

USE IN Q_QueriData
USE IN C_TERR_SPR
USE IN C_ind

SELECT C_QueriData
* И работать с данными
19 апр 06, 14:37    [2580151]     Ответить | Цитировать Сообщить модератору
 Re: Строить ли индексы для ускорения работы Select-ов  [new]
piva
Member

Откуда: Курган
Сообщений: 1096
На PostgreSQL их не советуют делать, если не уверен нужны они или нет
19 апр 06, 14:59    [2580320]     Ответить | Цитировать Сообщить модератору
 Re: Строить ли индексы для ускорения работы Select-ов  [new]
Владимир СА
Member

Откуда:
Сообщений: 7882
piva
На PostgreSQL их не советуют делать, если не уверен нужны они или нет
Привет Вадим!
Я ведь все качаю к себе в FOX. А в нем уже создаю временную таблицу для работы. Но для создания этой таблицы приходиться кучу работы проделать. Вот и думаю может еще индексы применить для ускорения? И PostgreSQL это не FOX или я что-то недопонимаю???
19 апр 06, 15:26    [2580529]     Ответить | Цитировать Сообщить модератору
 Re: Строить ли индексы для ускорения работы Select-ов  [new]
piva
Member

Откуда: Курган
Сообщений: 1096
Дык смотря какие выборки с сервера, может серверу серверово ? Пусть он "напрягается" чем тащить все
20 апр 06, 06:54    [2582443]     Ответить | Цитировать Сообщить модератору
 Re: Строить ли индексы для ускорения работы Select-ов  [new]
Владимир СА
Member

Откуда:
Сообщений: 7882
piva
Дык смотря какие выборки с сервера, может серверу серверово ? Пусть он "напрягается" чем тащить все
Вадим! Если посмотреть на мой первый топик более внимательно, то я не ТАЩУ ВСЕ данные. Конечно в SELECT-ах имеется условие WHERE... Под выражением:
Я ведь все качаю к себе в FOX.
Я имел ввиду все запросы, что показаны выше. Еще раз хочу напомнить, что в них присутствуют опции WHERE...
Может быть я неясно выразился. Вот к примеру рассмотреть запрос (который я уже формирую у себя в FOX-е):
SELECT I.* ;
  FROM Q_EC_INDICATORS_SPR I ;
    INNER JOIN Q_IIS_QUERI_Sect_Descns S ;
       ON I.SectCode = S.SectCode ;
    INNER JOIN Q_IIS_QUERI_V_Descns V ;
       ON I.VarMnem = V.VarMnem ;
  ORDER BY I.SectCode, I.VarMnem ;
  INTO CURSOR C_ind
Для его более быстрого получения м.б. построить индексы для таблиц:
SELECT Q_EC_INDICATORS_SPR
INDEX ON SectCode ...
INDEX ON VarMnem ...

SELECT Q_IIS_QUERI_Sect_Descns
INDEX ON SectCode ...

SELECT Q_IIS_QUERI_V_Descns
INDEX ON VarMnem ...
Хотя опции ORDER BY ... я обязательно указывал при получении: Q_EC_INDICATORS_SPR, Q_IIS_QUERI_Sect_Descns, Q_IIS_QUERI_V_Descns (смотреть первый топик).
20 апр 06, 08:12    [2582522]     Ответить | Цитировать Сообщить модератору
 Re: Строить ли индексы для ускорения работы Select-ов  [new]
dvm
Guest
А из fox rusmor убрали?
Вроде бы rushmor в sql select сам индексы может строить.
20 апр 06, 08:38    [2582541]     Ответить | Цитировать Сообщить модератору
 Re: Строить ли индексы для ускорения работы Select-ов  [new]
piva
Member

Откуда: Курган
Сообщений: 1096
Владимир СА
Для его более быстрого получения м.б. построить индексы
Завист от объема выборки - если не большая - то просто потртишь времчя на создание индексов - фокс при построении запросов САМ строит необходимые себе индексы или использует существеющие. Если в выборке записей мало - какой смысл строить индекс ? Тут надо смотреть индивидуйно ;)
20 апр 06, 08:47    [2582564]     Ответить | Цитировать Сообщить модератору
 Re: Строить ли индексы для ускорения работы Select-ов  [new]
Владимир СА
Member

Откуда:
Сообщений: 7882
dvm
А из fox rusmor убрали?
Вроде бы rushmor в sql select сам индексы может строить.

piva
...фокс при построении запросов САМ строит необходимые себе индексы или использует существеющие. Если в выборке записей мало - какой смысл строить индекс ? Тут надо смотреть индивидуйно ;)

Спасибо. Что-то я об этом упустил. Видимо переработал. Надо проанализировать.
20 апр 06, 09:18    [2582678]     Ответить | Цитировать Сообщить модератору
 Re: Строить ли индексы для ускорения работы Select-ов  [new]
andrew_Pr
Member

Откуда: Москва
Сообщений: 167
Что Вы хотите индексить, Владимир?
Q_TERR_SPR и Q_QueriData?
Или C_QueriData ?

Q_TERR_SPR и Q_QueriData в Вашем примере индексить бессмыслено!
Хотя мне вообще не понятно, зачем Вы тащите на клиента несколько отдельных курсоров, а потом здесь на Foxе их Join-ите? Все это надо делать на SQL-сервере и тянуть в Fox уже готовый C_QueriData !
Но раз уж Вы так делаете, то индексация Q_TERR_SPR и Q_QueriData Вам ничего не даст.

А индексить ли C_QueriData зависит уже от того, что Вы с ним будете делать дальше, и насколько он велик.
20 апр 06, 13:38    [2584281]     Ответить | Цитировать Сообщить модератору
 Re: Строить ли индексы для ускорения работы Select-ов  [new]
Владимир СА
Member

Откуда:
Сообщений: 7882
Вообще топик хотел закрыть, т.к. вроде разобрался. Но раз задан вопрос, надо ответить.
andrew_Pr
Q_TERR_SPR и Q_QueriData в Вашем примере индексить бессмыслено!
Вот за это спасибо.
andrew_Pr
Хотя мне вообще не понятно, зачем Вы тащите на клиента несколько отдельных курсоров, а потом здесь на Foxе их Join-ите? Все это надо делать на SQL-сервере и тянуть в Fox уже готовый C_QueriData !
Если внимательно посмотреть самый первый топик, то я загружаю курсоры (я их и называю с символа Q_) с трех различных баз. Причем первая лежит на MSSQL Server-е, вторая лежит в файле OEFDATA.MDB (Access) в отдельном каталоге и третья в файле QUERIDATA.MDB (Access). Т.е. ТРИ подключения (CONNECT). Поэтому сразу получить C_QueriData я и немогу. Вот в чем проблема.
andrew_Pr
А индексить ли C_QueriData зависит уже от того, что Вы с ним будете делать дальше, и насколько он велик.
Это я показал что я хотел получить. А индексить ее или нет, дейтвительно это мое дело.
20 апр 06, 14:11    [2584539]     Ответить | Цитировать Сообщить модератору
 Re: Строить ли индексы для ускорения работы Select-ов  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi Владимир!

> Если внимательно посмотреть самый первый топик, то я загружаю курсоры (я
> их и называю с символа Q_) с трех различных баз

Возможно стоит посмотреть в сторону "внешних источников" на MS SQL - там
вполне можно настроить соединение с ACCESS-овской базой и тем самым снизить
общие затраты - придётся только из 2-х баз через ODBC качать данные, а не из
всех 3-х... Впрочем если потом всё равно нужно это в фоксовую программу
перегонять, то выгода сомнительна...

Что касается индексов - то тут не может быть универсальных советов - иногда
проще индексы не делать (даже если они дают некоторый выигрыш в скорости),
но если объёмы велики и запрос работает достаточно долго, то стоит
попробовать ускорить процесс.

Posted via ActualForum NNTP Server 1.3

22 апр 06, 22:50    [2593222]     Ответить | Цитировать Сообщить модератору
 Re: Строить ли индексы для ускорения работы Select-ов  [new]
Владимир СА
Member

Откуда:
Сообщений: 7882
Igor Korolyov
...Возможно стоит посмотреть в сторону "внешних источников" на MS SQL - там вполне можно настроить соединение с ACCESS-овской базой и тем самым снизить общие затраты - придётся только из 2-х баз через ODBC качать данные, а не из всех 3-х... Впрочем если потом всё равно нужно это в фоксовую программу перегонять, то выгода сомнительна...
Надо поразмышлять на эту тему. Но обработку информации и показ пользователю я в какой-то среде должен сделать.
Igor Korolyov
...Что касается индексов - то тут не может быть универсальных советов - иногда проще индексы не делать (даже если они дают некоторый выигрыш в скорости), но если объёмы велики и запрос работает достаточно долго, то стоит попробовать ускорить процесс.
Спасибо за советы. Просто я наверное больше страхуюсь чем нужно.... Жизнь покажет и пользователь все равно уведомит об какой-либо неудовлетворенности с его стороны.
23 апр 06, 16:08    [2593800]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить