![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Скорость выборки
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 и добавить памяти в компьютер.