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

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

Помогите с оптимизацией SQL запроса [FireBird 2.1]


Страницы:   1 2

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)


Страницы:   1 2

Наверх

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