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


Sergey_Masloff   (2004-12-18 20:47:00) [101]

Piter ©   (18.12.04 20:39) [8]
>в смысле?
В прямом. Во время работы много DELETE и UPDATE?
Мое предположение такое (если тормоз на 1 выборке):
1) Во время работы программы идет много апдейтов и удалений
2) При каждом изменении-удалении IB создает "версии" записей. Рано или поздно версии становятся "мусором" и помечаются соответствующим флагом. При следующем обращении к записи IB видит последнюю и старые мусорные версии и удаляет мусор. Это занимает время.

Эксперимент:
1) СОздаешь таблицу с 100000 записей
2) Делаешь DELETE FROM YOURTABLE
3) Делаешь COMMIT
4) Делаешь SELECT COUNT(*) FROM YOURTABLE
5) Наслаждаешься наблюдением диких тормозов N времени при приличной загрузке процессора интербейзом.


DrPass   (2004-12-18 20:42:00) [102]

Транзакции убирают мусор, который оставили их предшественники. Если до этого у тебя проводились масштабные операции удаления/обновления, сборка мусора займет заметное время.


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

Sergey_Masloff   (18.12.04 20:17) [6]
А не сборка ли энто мусора?


в смысле?


Piter   (2004-12-18 20:38:00) [104]

AlterEgo of WondeRu ©   (18.12.04 19:20) [5]
совет. а попробуй инициализацию проводить на другой таблице


Хм, инциализацию данной таблицы проводить на другой таблице? Как ты себе это представляешь...


Sergey_Masloff   (2004-12-18 20:17:00) [105]

Piter ©   (18.12.04 18:50)
А не сборка ли энто мусора? 4 сек на 5000 записей многовато конечно но - точно не оно?


AlterEgo of WondeRu   (2004-12-18 19:20:00) [106]

Piter ©   (18.12.04 19:13) [4]
совет. а попробуй инициализацию проводить на другой таблице! т.е. хотя бы на анкетах, она же пустая!


Piter   (2004-12-18 19:13:00) [107]

AlterEgo of WondeRu ©   (18.12.04 18:57) [2]
испоьзуй нормальный Firebird, с ним у меня никогда проблем не возникало


а почему бы Oracle не посоветовать?

Если я использую Firebird Embedded, то значит это чем-то обоснованно.

Да и на обычном Firebird тоже самое


Piter   (2004-12-18 19:12:00) [108]

Anatoly Podgoretsky ©   (18.12.04 18:53) [1]
Индекс по полю N


индекс по полю N есть. Причем что он есть, что его нету - пофигу.

и добавить памяти в компьютер.

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


AlterEgo of WondeRu   (2004-12-18 18:57:00) [109]

{+оффтоп}
Piter ©   (18.12.04 18:50)
Использую базу Firebird Embedded

испоьзуй нормальный Firebird, с ним у меня никогда проблем не возникало
{-оффтоп}


Anatoly Podgoretsky   (2004-12-18 18:53:00) [110]

Индекс по полю N и добавить памяти в компьютер.


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

Наверх

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