Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Строить ли индексы для ускорения работы Select-ов / 12 сообщений из 12, страница 1 из 1
19.04.2006, 14:37
    #33676727
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строить ли индексы для ускорения работы Select-ов
Нужно ли строить индексы для ускорения работы Select-ов???
У меня в разых БД лежит информация. В моих рабочих БД конечно информации мало. У заказчика информации будет больше и нарастать. Вот примерный код для получения данных с которыми необходимо будет работать. Хотя при получении промежуточных данных использую ORDER BY, но может быть необходимо все таки построить временные индексы для ускорения получения информации по SELECT...
Код: plaintext
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
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
* И работать с данными
...
Рейтинг: 0 / 0
19.04.2006, 14:59
    #33676804
piva
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строить ли индексы для ускорения работы Select-ов
На PostgreSQL их не советуют делать, если не уверен нужны они или нет
...
Рейтинг: 0 / 0
19.04.2006, 15:26
    #33676895
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строить ли индексы для ускорения работы Select-ов
piva На PostgreSQL их не советуют делать, если не уверен нужны они или нет Привет Вадим!
Я ведь все качаю к себе в FOX. А в нем уже создаю временную таблицу для работы. Но для создания этой таблицы приходиться кучу работы проделать. Вот и думаю может еще индексы применить для ускорения? И PostgreSQL это не FOX или я что-то недопонимаю???
...
Рейтинг: 0 / 0
20.04.2006, 06:54
    #33677994
piva
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строить ли индексы для ускорения работы Select-ов
Дык смотря какие выборки с сервера, может серверу серверово ? Пусть он "напрягается" чем тащить все
...
Рейтинг: 0 / 0
20.04.2006, 08:12
    #33678060
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строить ли индексы для ускорения работы Select-ов
pivaДык смотря какие выборки с сервера, может серверу серверово ? Пусть он "напрягается" чем тащить всеВадим! Если посмотреть на мой первый топик более внимательно, то я не ТАЩУ ВСЕ данные. Конечно в SELECT-ах имеется условие WHERE... Под выражением:
Я ведь все качаю к себе в FOX. Я имел ввиду все запросы, что показаны выше. Еще раз хочу напомнить, что в них присутствуют опции WHERE...
Может быть я неясно выразился. Вот к примеру рассмотреть запрос (который я уже формирую у себя в FOX-е):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
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
Для его более быстрого получения м.б. построить индексы для таблиц:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
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 (смотреть первый топик).
...
Рейтинг: 0 / 0
20.04.2006, 08:38
    #33678076
dvm
dvm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строить ли индексы для ускорения работы Select-ов
А из fox rusmor убрали?
Вроде бы rushmor в sql select сам индексы может строить.
...
Рейтинг: 0 / 0
20.04.2006, 08:47
    #33678088
piva
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строить ли индексы для ускорения работы Select-ов
Владимир САДля его более быстрого получения м.б. построить индексы Завист от объема выборки - если не большая - то просто потртишь времчя на создание индексов - фокс при построении запросов САМ строит необходимые себе индексы или использует существеющие. Если в выборке записей мало - какой смысл строить индекс ? Тут надо смотреть индивидуйно ;)
...
Рейтинг: 0 / 0
20.04.2006, 09:18
    #33678161
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строить ли индексы для ускорения работы Select-ов
dvmА из fox rusmor убрали?
Вроде бы rushmor в sql select сам индексы может строить.
piva... фокс при построении запросов САМ строит необходимые себе индексы или использует существеющие. Если в выборке записей мало - какой смысл строить индекс ? Тут надо смотреть индивидуйно ;)
Спасибо. Что-то я об этом упустил. Видимо переработал. Надо проанализировать.
...
Рейтинг: 0 / 0
20.04.2006, 13:38
    #33679191
andrew_Pr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строить ли индексы для ускорения работы Select-ов
Что Вы хотите индексить, Владимир?
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 зависит уже от того, что Вы с ним будете делать дальше, и насколько он велик.
...
Рейтинг: 0 / 0
20.04.2006, 14:11
    #33679346
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строить ли индексы для ускорения работы Select-ов
Вообще топик хотел закрыть, т.к. вроде разобрался. Но раз задан вопрос, надо ответить. andrew_PrQ_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 зависит уже от того, что Вы с ним будете делать дальше, и насколько он велик.Это я показал что я хотел получить. А индексить ее или нет, дейтвительно это мое дело.
...
Рейтинг: 0 / 0
22.04.2006, 22:50
    #33684609
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строить ли индексы для ускорения работы Select-ов
Hi Владимир!

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

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

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

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
23.04.2006, 16:08
    #33684929
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Строить ли индексы для ускорения работы Select-ов
Igor Korolyov...Возможно стоит посмотреть в сторону "внешних источников" на MS SQL - там вполне можно настроить соединение с ACCESS-овской базой и тем самым снизить общие затраты - придётся только из 2-х баз через ODBC качать данные, а не из всех 3-х... Впрочем если потом всё равно нужно это в фоксовую программу перегонять, то выгода сомнительна...Надо поразмышлять на эту тему. Но обработку информации и показ пользователю я в какой-то среде должен сделать.
Igor Korolyov...Что касается индексов - то тут не может быть универсальных советов - иногда проще индексы не делать (даже если они дают некоторый выигрыш в скорости), но если объёмы велики и запрос работает достаточно долго, то стоит попробовать ускорить процесс.Спасибо за советы. Просто я наверное больше страхуюсь чем нужно.... Жизнь покажет и пользователь все равно уведомит об какой-либо неудовлетворенности с его стороны.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Строить ли индексы для ускорения работы Select-ов / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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