![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с оптимизацией SQL запроса [FireBird 2.1]
DelphiN! © (2008-10-07 14:50:00)Добрый день.
Есть задача, нужно синхронизировать файлы на клиентском компьютере с каталогом на серверном.
Есть 2 таблицы ServerFT и ClientFT, с одинаковыми полями :
FILENAME VARCHAR (1000)
BASEDIR VARCHAR (255)
FILESIZE BIGINT
FILECRC BIGINT
ID INTEGER PRIMARY KEY
На все поля в обоих таблицах стоят индексы.
Обе таблицы в начале очищаются, а потом в них заносится примерно по 150 000 записей(найденые файлы на 2х компьютерах - файлы найденые на сервере заносятся в таблицу ServerFT, а файлы найденые на клиенте в таблицу ClientFT),
далее выполняется поиск отличающихся друг от друга записей в разных таблицах(поиск отличающихся или отсутствующих на одном компе, но присутствующих на другом файлов). Выполняю поиск различий следующим SQL запросом :
select
srv.FileName Srv_FName, cnt.FileName Cnt_FName,
srv.FileSize Srv_FSize, cnt.filesize Cnt_FSize,
srv.filecrc Srv_FCRC, cnt.FileCRC Cnt_FCRC,
srv.BASEDIR Srv_BaseDir, cnt.BASEDIR Cnt_BaseDir
from serverft srv
full join clientft cnt on
(srv.FileName = cnt.FileName)
where ((srv.filename is null)or(cnt.filename is null))
or(cnt.filesize <> srv.FileSize)or(cnt.filecrc <> srv.filecrc)
Данный SQL запрос уже выполняется около 1 часу и еще не известно сколько он будет выполнятся. Данное время выполнения очень велико, можно ли как либо увеличить скорость выборки?
Anatoly Podgoretsky (2008-10-07 15:17:00) [21]Есть вопросы
1. FILENAME VARCHAR (1000)
почему 1000? Когда максимально 260
2. BASEDIR VARCHAR (255)
почему 255, а не 260
3. BASEDIR VARCHAR (255)
readme.txt в разных BASEDIR это разные файлы или нет.
Поросенок Винни-Пух (2008-10-07 15:02:00) [22]скока показывает вот такое?
select count(*) from serverft srv
full join clientft cnt on
(srv.FileName = cnt.FileName)