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

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

Скорость выборки


Страницы:   1 2 3 4 5 6

Piter ©   (2004-12-18 18:50:00) 

Есть такое выражение:

'SELECT Count(n) From MyTable Where n=0'

Выборка длится около 4 секунд :(
Всего записей в базе 4700.

Почему так медленно? Правда, стоит заметить, что это только первый раз так долго. Потом такие выражения выполняются не более 100 мс, но все равно - загрузка программы происходит очень долго из-за этого.

Такое ощущение, что это как бы инициализация работы с таблицей. То есть, при первой выборке из этой таблице что-то там делается долго, после чего последующие выборки из этой таблицы отрабатывают оперативно. Ну это мне так кажется.

Можно как-нибудь ускорить процесс? А то 4 секунды - это перебор все таки, имхо, на Athlon 1800. Не понимаю, как тогда работают базы с миллионами записей...

Использую базу Firebird Embedded


DrPass   (2005-01-04 00:19:00) [1]

Если бы оный пациент покромсал свою прогу и базу, да выложил ее для тестов, все бы решилось в момент. А вообще - побить его да выгнать, дабы не мешал людям новогодние праздники ощущать


Zacho   (2005-01-03 22:13:00) [2]

Sergey_Masloff   (03.01.05 21:56) [108]

Мне это тоже крайне любопытно :)


Sergey_Masloff   (2005-01-03 21:56:00) [3]

Zacho ©   (03.01.05 21:35) [107]
>И в трезвом виде тоже не смог :)

Я тоже не смог хотя вообще практически не пью. Но пациент упорствует в ереси. Может какой-то редкий случай?


Zacho   (2005-01-03 21:35:00) [4]

Sergey_Masloff   (03.01.05 21:07) [106]

Я действительно счас пьян, но как не пытался, такого получить не смог. И в трезвом виде тоже не смог :)


Sergey_Masloff   (2005-01-03 21:07:00) [5]

Zacho ©   (03.01.05 21:05) [105]
>И ащё - ПК сделай наконец, да ?
Уже сделал он же ж ;-). Ускорение было но недостаточное. Хотя в цифрах бы... Желательно на таблице тысяч 500 записей.


Zacho   (2005-01-03 21:05:00) [6]

Piter ©   (03.01.05 15:43) [103]

И ащё - ПК сделай наконец, да ?

Sorry, Миша, пьян я счас...
А воообще, зачем up ? Усё уже разжевали...


DrPass   (2005-01-03 19:32:00) [7]

Ты все ж таки попробуй поработать с файловой системой - сперва выполни дефрагментацию диска, на котором лежит база, а после этого - backup-restore самой базы.


Piter   (2005-01-03 15:43:00) [8]

up


Piter   (2004-12-21 21:42:00) [9]

Anatoly Podgoretsky ©   (21.12.04 13:13) [101]
И насчет скорости select я думаю тоже лукавит, наверняка серверный курсор и эта скорость только скорость выборки очень небольшой части данных


вполне может быть. Я четко писал что делал - выполнял выражение "SELECT * FROM TestTable" из IBConsole и приводил его статистику.


Anatoly Podgoretsky   (2004-12-21 13:13:00) [10]

Имено так, плюс сумма выполнения обеих запросов, плюс возможное расхождения количества, по первому и второму запросу (для embeded неважно). И насчет скорости select я думаю тоже лукавит, наверняка серверный курсор и эта скорость только скорость выборки очень небольшой части данных, а не всего запроса.


Zacho   (2004-12-21 11:53:00) [11]

WondeRu ©   (21.12.04 11:27) [98]

Не будет он быстрее работать. Ну, разве что, в каких-либо совсем экзотических случаях.

Кстати, я регулярно использую FetchAll и RecordCount для отчетов. Все равно весь резалтсет фетчить, так заче ещё один запрос ?


sniknik   (2004-12-21 11:49:00) [12]

> а попробуй еще раз - мне кажется ты ошибся. Ибо даже на SQL.ru писали, что count(*) поднимает всю таблицу и кеширует ее.
сколько ж еще пробовать? ;о) я себе доверяю. хотя проверил еще раз, на работе. то же самое (методов не менял)

зависит от компонентов/движка? я же писал использовал ADO для теста.
может я тебе всетаки вышлю прогу (если адрес даш ;)
надо будет скачать OLEDB провайдера (установка элементарная, регистрация dll там bat файл есть для этого)
http://zstyle.dp.ua/rus/iboledb_prod.htm

строка подключения будет примерно такая
Provider=IBOLE.Provider.v4;Password=masterkey;Persist Security Info=True;Data Source=D:\CONMAN.GDB
и вот на нем и пробуй с count(*) и простой запрос. все адекватно работает (небольшая задержка тоже понятна, в прежнем посте писал предполагаемые причины, непонятна была большаязадержка).

(здесь я просто представляю как все работает, а в твоих компонентах х.з. ощущение такое что у тебя для каунта действительно полная выборка используется и проверка recordcount а вот простой селект открывается с серверным курсором... вот кстати проверь, померь время не после Query.Open; а после Query.Open; Query.Last; (закачки на клиента))


WondeRu   (2004-12-21 11:27:00) [13]

jack128 ©   (21.12.04 11:13) [97]
Только вот бредовый это способ...

если он быстрее будет работать, тогда чего мучаться??


jack128   (2004-12-21 11:13:00) [14]

WondeRu ©   (21.12.04 9:00) [96]
для IBX RecordCount - это кол-во отфетчиных записей. Для коректной работы нужно в [89] после Open добавить FetchAll. Только вот бредовый это способ...


WondeRu   (2004-12-21 09:00:00) [15]

Piter ©   (21.12.04 0:40) [94]
она у тебя ноль выдаст

ты пробовал?????


WondeRu   (2004-12-21 09:00:00) [16]

Piter ©   (21.12.04 0:40) [94]
она у тебя ноль выдаст

ты пробовал?????


Piter   (2004-12-21 00:40:00) [17]

она у тебя ноль выдаст


Piter   (2004-12-21 00:39:00) [18]

AlterEgo of WondeRu ©   (21.12.04 0:17) [91]
или я не прав?


не прав


AlterEgo of WondeRu   (2004-12-21 00:22:00) [19]

попробуй... хотя справка говорит:
Generally, an application should only use RecordCountwith Paradox and dBASE tables.


AlterEgo of WondeRu   (2004-12-21 00:17:00) [20]

Piter ©   (21.12.04 0:11) [90]
какой ответ получится если проверять RecordCount?

думаю тоже самое что и при count(*)! или я не прав?


Страницы:   1 2 3 4 5 6

Наверх

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