Форум: "Базы";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
ВнизОптимизация БД Найти похожие ветки
← →
Алексей Петухов (2004-03-02 07:16) [0]Здравствуйте уважаемые мастера.
Сразу извините за длинный вопрос.
Используется БД 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-02 08:35) [1]запрос на выборку одной записи и так должен летать, только надо выбирать эту запись и "прикручивать" к ней справочники, а не нооборот:
from
"nak_zag.dbf" z
LEFT JOIN "type_nak.dbf" t on z.type_nak_id=t.id
← →
Алексей Петухов (2004-03-02 09:22) [2]То есть, извините, вот так?
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
И такой подход действительно ускорит обработку запроса?
← →
Johnmen © (2004-03-02 09:28) [3]
FROM ...
LEFT JOIN ...
LEFT JOIN ...
В данном конкретном случае не ускорит.
← →
Desdechado © (2004-03-02 09:39) [4]индексы по полям, по кот. происходит объединение, должны ускорить
СУБД на 2 таблицы можно любую
← →
Алексей Петухов (2004-03-02 09:51) [5]Да нет.
Таблиц у меня 13 штук.
В одном запросе используется максимум до 6 таблиц.
Но ведь индексы замедлят и всавку записей.
А вообще как в данном случае индексы создать?Create Index
?
← →
Карелин Артем © (2004-03-02 09:57) [6]DataBase DeskTop
← →
ЮЮ © (2004-03-03 03:00) [7]>Но ведь индексы замедлят и всавку записей.
Ну уж первичный ключ по ID просто необходим
← →
Алексей Петухов (2004-03-03 06:32) [8]
> Ну уж первичный ключ по ID просто необходим
А что это он таким необходимым стал?
Я, например, без него как-то обхожусь
> DataBase DeskTop
Спасибо за совет, конечно, но я таблички прграмно создаю, да и если таблицы переиндексировать понадобиться, мне пользователя ДБ Десктопоу обучать?
← →
Anatoly Podgoretsky © (2004-01-23 13:20) [9]Необязателен, но без него жить сложно, особенно в Парадоксе.
← →
ЮЮ © (2004-03-04 05:24) [10]>Я, например, без него как-то обхожусь
Вот так и обходишься, что поиск одной записи по ID, который у всех выполняется слёту, у тебя уже вызывакт проблемы :-)
CREATE TABLE "tmp1.dbf" (
ID integer,
Name char(10)),
PRIMARY KEY(ID)
)
← →
Карелин Артем © (2004-03-04 11:16) [11]Тогда смотри IndexDefs и CreateIndex
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.177 c