![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Тормозит FireBird [D7, firebird]
Denkop © (2003-09-30 14:01:00)
Юзаю firebird WI-V1.0.3.972, версия 3-х недельной давности.
Делаю примерно такой запрос:
SELECT * FROM MAINTABLE T1
LEFT JOIN ORG_GROUP T2 ON T1.ID_GROUP=T2.ID
LEFT JOIN REG_GROUP T3 ON T1.ID_REG=T3.ID
LEFT JOIN TOWN_GROUP T4 ON T1.ID_TOWN=T4.ID
Поля X.NAME, X.ID все проиндексированы (ID-первич,NAME-вторич);
Для доступа использую стандартные компоненты с вкладки InterBase (IBDataBase,IBTransaction,IBQuery).
Структура MAINTABLE (примерно 100000 записей):
CREATE TABLE MAINTABLE (
ID INTEGER NOT NULL,
ID_GROUP INTEGER,
NAME VARCHAR(150),
TEL VARCHAR(20),
FAX VARCHAR(20),
FIO VARCHAR(150),
EMAIL VARCHAR(240),
WEB VARCHAR(240),
ADDRESS VARCHAR(240),
ID_REG INTEGER,
ID_TOWN INTEGER,
ZIP VARCHAR(10)
);
остальные таблицы классификаторы (ID, NAME)
На машине Authlon 1400/256mb/40HDD Seagate 7200 Ata100 этот запрос выполняется около минуты!
В настройках FIB:
Database Cash: 2048
Map size: 50698
Как можно повысить быстродействие выборки?
Nikolay M. (2003-09-30 14:08:00) [21]
Нужны обязательно JOIN-ы? Через WHERE не прокатит?
А если сделать лукапные поля на клиенте? А я так вообще иногда делаю так: загоняю маленькие справочники, отсортированные по ключу, в память и приделываю Calculated-поле, в котором делается поиск по ключу в этом массиве в памяти методом деления отрезка пополам. Получается более чем резво. Если памяти, конечно, много...
Vlad (2003-09-30 14:08:00) [22]
А причем тут индексы, когда у тебя FullScan по таблице ?
Индексы тебе тут сильно не помогут. Время для 100000 записей нормальное.