Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Оптимизация БД


Алексей Петухов ©   (2004-03-02 07:16:00) 

Здравствуйте уважаемые мастера.
Сразу извините за длинный вопрос.
Используется БД PARADOX.
Состоит из нескольких таблиц.
Локально, TDataBase.Exclusive:=true;
1. Вопрос в том, как усорить обработку SQL запросов?
2. Какую БД лучше использовать в данном случае?
3. Поможет ли создание индексов и будет ли BDE эти индексы использовать?
4. Может перейти на INTERBASE?

Заранее благодарю за помощь.

В общем виде таблицы такие:
1. CREATE TABLE "tmp.dbf"
( ID integer,
 type_nak_id integer,
 mag_id integer,
 data date,
 pos_id integer,
 oplata numeric(10,2),
 sum_zak numeric(10,2),
 sum_real numeric(10,2))

2. CREATE TABLE "tmp1.dbf"
( ID integer,
 Name char(10))


Использую для работы TQuery запросы примерно такие:
select
t.id t_id, t.name t_name,
z.id, z.type_nak_id, z.data z_data, z.pos_id, z.oplata z_oplata, z.sum_zak z_sum_zak, z.sum_real z_sum_real,
p.id p_id, p.name p_name,
t.rank t_rank,
z.mag_id z_mag_id,
upper(p.name) up_p_name
from
"type_nak.dbf" t
right join
"nak_zag.dbf" z
on
z.type_nak_id=t.id
left join
"pos.dbf" p
on
p.id=z.pos_id
where z.mag_id=:mag_id
order by
up_p_name, z_data, t_rank


Карелин Артем   (2004-03-04 11:16:00) [1]

Тогда смотри IndexDefs и CreateIndex


ЮЮ   (2004-03-04 05:24:00) [2]

>Я, например, без него как-то обхожусь

Вот так и обходишься, что поиск одной записи по ID, который у всех выполняется слёту, у тебя уже вызывакт проблемы :-)

CREATE TABLE "tmp1.dbf" (
 ID integer,
 Name char(10)),
  PRIMARY KEY(ID)
)


Алексей Петухов   (2004-03-03 06:32:00) [3]


> Ну уж первичный ключ по ID просто необходим

А что это он таким необходимым стал?
Я, например, без него как-то обхожусь

> DataBase DeskTop

Спасибо за совет, конечно, но я таблички прграмно создаю, да и если таблицы переиндексировать понадобиться, мне пользователя ДБ Десктопоу обучать?


ЮЮ   (2004-03-03 03:00:00) [4]

>Но ведь индексы замедлят и всавку записей.

Ну уж первичный ключ по ID просто необходим


Карелин Артем   (2004-03-02 09:57:00) [5]

DataBase DeskTop


Алексей Петухов   (2004-03-02 09:51:00) [6]

Да нет.
Таблиц у меня 13 штук.
В одном запросе используется максимум до 6 таблиц.
Но ведь индексы замедлят и всавку записей.
А вообще как в данном случае индексы создать? Create Index?


Desdechado   (2004-03-02 09:39:00) [7]

индексы по полям, по кот. происходит объединение, должны ускорить
СУБД на 2 таблицы можно любую


Johnmen   (2004-03-02 09:28:00) [8]

FROM ...
LEFT JOIN ...
LEFT JOIN ...


В данном конкретном случае не ускорит.


Алексей Петухов   (2004-03-02 09:22:00) [9]

То есть, извините, вот так?

from
"nak_zag.dbf" z
left join
"type_nak.dbf" t,
"pos.dbf" p
on
z.type_nak_id=t.id
z.pos_id=p.id


И такой подход действительно ускорит обработку запроса?


ЮЮ   (2004-03-02 08:35:00) [10]

запрос на выборку одной записи и так должен летать, только надо выбирать эту запись и "прикручивать"  к ней справочники, а не нооборот:

from
 "nak_zag.dbf" z
 LEFT JOIN "type_nak.dbf" t on z.type_nak_id=t.id


Anatoly Podgoretsky   (2004-01-23 13:20:00) [11]

Необязателен, но без него жить сложно, особенно в Парадоксе.


Наверх

Титульная страница Поиск, карта сайта Написать письмо