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

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

Быстрый поиск в БД [D6, Paradox]


Страницы:   1 2

Suharew ©   (2005-05-15 16:25:00) 

Есть БД Paradox около 1000000 записей. Использую SQL для работы с ней. Когда ищу запись с помошью Locate, он ее находит слишком медленно, ну где-то секунд за 6-7, Подскажите быстрее никак нельзя.


Sergey13   (2005-06-02 10:41:00) [1]

2[37] Виталий Панасенко   (02.06.05 10:29)
А при чем тут Refresh ? Что ты собираешься решрешить?


Виталий Панасенко   (2005-06-02 10:29:00) [2]


> >а если использовать TTable тогда база постоянно открыта
> и обновления вносятся сразу не переоткрывая таблицу
> Ты забыл дописать "на этом компе". Это справедливо и для
> Кверика-датасета. Для чужих изменений это монопенисуально
> - без переоткрытия не увидишь.

А зачем тогда Refresh ?


Санёк   (2005-06-02 09:57:00) [3]

А Ты не пробовал положить табличку с миллионом записей на какой-нибудь компьютер в локальной сети?
Особенно при первом открытии (пока не скеширована табличка), засеки время: 6-8 секунд может не хватить.
Иногда встречаются заказчики с 10-Мбитной сетью.


Sergey13   (2005-05-19 16:49:00) [4]

2[34] suharew   (19.05.05 16:43)
>При SQL запросе возвращается только результирующий набор данных.
Ты забыл дописать "от SQL сервера". С Парадоксом все несколько иначе.

>а если использовать TTable тогда база постоянно открыта и обновления вносятся сразу не переоткрывая таблицу
Ты забыл дописать "на этом компе". Это справедливо и для Кверика-датасета. Для чужих изменений это монопенисуально - без переоткрытия не увидишь.


suharew   (2005-05-19 16:43:00) [5]

2[29] Sergey13
>И что? Открывается быстрее? И/или обновляется автоматом?
При SQL запросе возвращается только результирующий набор данных. Поэтому при добавлении информации, изменений не видно пока не переоткроешь базу, а если использовать TTable тогда база постоянно открыта и обновления вносятся сразу не переоткрывая таблицу т.о. снижается на грузка на сеть.

to Anatoly Podgoretsky
мне не столько влом переделывать все под сервер, просто я как то пытался разобраться с сервером что это и как с ним работать, но так ничего и не получилось. Я же не супер крутой программер. Поэтому подскажите какую-нибудь литературу где все подробненько разжевано про работу с сервером БД. Я даже скачал сервер FireBird, но как говорил раньше ума ему не дал.


Sergey13   (2005-05-19 10:07:00) [6]

2[32] evvcom ©   (19.05.05 10:06)
>Действительно, лом и программист в принципе не совместимы.
Это от релиза к релизу меняется. Я бы ен был столь категоричен. 8-)


evvcom   (2005-05-19 10:06:00) [7]

Действительно, лом и программист в принципе не совместимы. Зато совместимы лом и геморрой!


Anatoly Podgoretsky   (2005-05-19 10:02:00) [8]

evvcom ©   (19.05.05 09:56) [30]
Так то так, но он не совместим, у него лом.


evvcom   (2005-05-19 09:56:00) [9]

Поставь лучше какой-нить простенький сервер. Переписывать немного, зато куча проблем сразу пропадет. И не узнаешь, что такое геморрой с локальными базами в многопользовательской системе. И траффик снизишь. И прочее...


Sergey13   (2005-05-19 09:18:00) [10]

2[28] suharew   (18.05.05 23:31)
>Впринципе я нашел некоторый выход.
И что? Открывается быстрее? И/или обновляется автоматом?


suharew   (2005-05-18 23:31:00) [11]

Да индекс есть. Если база уже открыта по сети то Locate быстро находит. Но т.к. базы открываются SQL запросом то при добавлении информации на одном компе, на другом она не обновляется. Приходится переоткрывать таблицы. Поэтому я при каждом поиске сначала переоткрываю таблицы а потом ищу нужный номер телефона. Поэтому и происходит задержка в 5 сек (пока база откроется, пока номер найдется). Когда база была маленькая около 1000 записей. Вообще все летало.
Впринципе я нашел некоторый выход. Открыть таблицы с помощью Table и работать с таблицей без SQL запросов, т.е. напрямую через TTable. (Edit,insert,post)


Виталий Панасенко   (2005-05-18 15:58:00) [12]


> Подозреваю, что есть индекс. Иначе он не 5 секунд бы ждал
> наверное на полумиллионе записей. 8-)

Проще автору вопроса ответить.. :-) Но провел "эксперимент на себе" - LIKE действительно тормозит... А вот точное сравнение - "мухой".. Это при наличии индекса.. У меня 1000000 записей, добавил еще поле Ф3 символьное, 20.. И положил на сетку, 100 мб


Sergey13   (2005-05-18 15:11:00) [13]

2[25] Виталий Панасенко   (18.05.05 14:59)
Подозреваю, что есть индекс. Иначе он не 5 секунд бы ждал наверное на полумиллионе записей. 8-)


Виталий Панасенко   (2005-05-18 14:59:00) [14]


> Если делать
>
> query1.close;
> query1.sql.clear;
> query1.sql.add('select * from telefon.db WHERE TEL LIKE
> "' + trim(t)+'%"order by tel');
> query1.open;
>
> то уходит около 5 сек. (т.к. есть сеть)

А индекс не пробовал строить по полю TEL ?


Sergey13   (2005-05-18 13:02:00) [15]

2[23] Suharew   (18.05.05 12:56)
Если "травмируется психика пользователя", а тебе "влом мне" то наступает непримиримое противоречие, решаемое только административным путем. 8-)


Suharew   (2005-05-18 12:56:00) [16]

to Sergey13
согласен что это не совсем корректно, тем более с базой по сети работают несколько пользователей. Нужно работать с sql сервером, но влом мне.


Sergey13   (2005-05-18 12:13:00) [17]

2[21] suharew   (18.05.05 12:07)
>таблица у меня не совсем локального типа.
Локальная, локальная. Только используешь ты ее не по назначению. 8-)


suharew   (2005-05-18 12:07:00) [18]

to sniknik
таблица у меня не совсем локального типа.
ну т.е. программа запускается на одном компе а обращается к базе которая находится на другом компе. поэтому при открытии всей базы дает нагрузку на сеть. попробую открывать таблицей.

to anatoly podgoretsky
у меня база телефонов там находятся и городские номера и сотовые поэтому там их так много. ну ладно не миллион там но около полумиллиона.

Если делать

query1.close;
query1.sql.clear;
query1.sql.add('select * from telefon.db WHERE TEL LIKE "' + trim(t)+'%"order by tel');
query1.open;

то уходит около 5 сек. (т.к. есть сеть)
поэтому как писал ранее анатолий "травмируется психика пользователя".Поэтому пользователь и хочет чуть быстрее чтобы все это работало.


Deller   (2005-05-18 11:20:00) [19]

А что такое trim(t)?


Виталий Панасенко   (2005-05-18 09:12:00) [20]


> query1.close;
> query1.sql.clear;
> query1.sql.add('select * from telefon.db order by tel');
> query1.open;
>
> query1.locate('tel',trim(t),[loPartialKey]);

Ведь выстоящее можно переделать(лучше, конечно, параметр.. лень писать) - будет однохерственно...
query1.close;
query1.sql.clear;
query1.sql.add('select * from telefon.db WHERE TEL LIKE "' + trim(t)+'%"order by tel');
query1.open;


Страницы:   1 2

Наверх

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