Форум: "Базы";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
Вниз
Скорость выборки Найти похожие ветки
← →
Piter © (2004-12-20 21:08) [80]sniknik © (20.12.04 1:12) [63]
задержка на первом есть, но не 4 сек, это точно
ну на тестовой таблице у меня тоже не 4 секунды, а меньше, около секунды. На реальной 4 секунды, но там полей больше.
sniknik © (20.12.04 1:12) [63]
первый запуск предложенного селекта с count(*) около сек. (0,73 показало) второй 0,06.
и у меня тоже самое. Только не 0,73 - а ближе к секунде
при добавленом индексе время меньше но не намного
аналогично
Sergey_Masloff (20.12.04 9:19) [66]
Prepare time = 0ms
Execute time = 125ms
даже учитывая, что таблицы без ПК - поразительные результаты... Может, у тебя таблица не как у меня? Сделай таблицу точно такой структуры как я написал. И заполни ее 10.000 записями по алгоритму программы, которую я выложил.
Sergey_Masloff (20.12.04 17:03) [74]
Возможно, но тут вопрос почему такое поведение не удается повторить на других машинах?
почему же? У Sniknik очень похожие результаты. А вот твои результаты мне нравятся гораздо больше, если бы у меня так было... но мне просто кажется, что ты экспериментируешь на другой таблице, более простой для подсчета. Попробуй таблицу, которую использовал Sniknik и я.
Alexander Panov © (20.12.04 16:52) [73]
При первом чтении начитывается в кэш - поэтому долго.
При следующих обращениях работа идет уже с данными в памяти+отложенная запись на диск
несомненно. Вопрос в другом - почему первый раз так долго?
sniknik © (20.12.04 1:12) [63]
странно, у меня count работает на порядок быстрее чем полный селект. (так и должно в приципе)
а попробуй еще раз - мне кажется ты ошибся. Ибо даже на SQL.ru писали, что count(*) поднимает всю таблицу и кеширует ее.
По крайней мере, у меня первый count(*) на тестовой таблице длится секунду. На реально - четыре секунды.
А вот SELECT * происходит практически мгновенно.
← →
Piter © (2004-12-20 21:16) [81]Sergey_Masloff (20.12.04 20:56) [78]
Создать первичный ключ пробовал? Как результат?
да, создавал. Ускорение, конечно, есть, но хочется еще быстрее...
А можно как-нибудь добавить к существующей базе поле с Primary Key?
Неужели придется переносить записи...
← →
Sergey_Masloff (2004-12-20 21:19) [82]Piter © (20.12.04 21:08) [80]
>Попробуй таблицу, которую использовал Sniknik и я.
Мои сообщения Sergey_Masloff (20.12.04 09:19) [66]
относятся К ТВОЕЙ структуре таблицы. В одном случае я добавил к ней еще одно поле и заполнил его уникальными значениями пометив как PK. В таблице 6700 записей, до 10 тыс могу конечно набросить но сначала
СДЕЛАЙ PK И НАПИШИ РЕЗУЛЬТАТ ТЕСТА!!!! ;-)))
← →
AlterEgo of WondeRu © (2004-12-20 21:21) [83]Piter © (20.12.04 21:08) [80]
А вот SELECT * происходит практически мгновенно.
это первый селект из таблицы?
← →
AlterEgo of WondeRu © (2004-12-20 21:24) [84]Anatoly Podgoretsky © (20.12.04 21:04) [79]
теперь я допрашиваю)
← →
Sergey_Masloff (2004-12-20 21:26) [85]Когда писал не видел
Piter © (20.12.04 21:16) [81]
К существующей базе добавить можно но чревато опасностями. Прще так: берешь скрипт таблицы и создаешь вторую такую же по структуре.
1) Делаешь INSERT INTO TABLE2 SELECT * FROM TABLE
2) Делаешь DELETE FROM TABLE
3) Добавляешь 1 поле ID INTEGER NOT NULL
4) Добавляешь триггер бифор инсерт
IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID(YOURGENERATORNAME,1);
5) Объявляешь PRIMARY KEY(ID);
6) Делаешь INSERT INTO TABLE(FIELD1,...FIELDN)
SELECT FIELD1,...FIELDN FROM TABLE2
7) Делаешь DROP TABLE2
Все в твоей TABLE есть ПК.
← →
Sergey_Masloff (2004-12-20 21:29) [86]Стоп... у тебя есть BLOB-ы. Не катит
Тогда так: добавляешь поле, заполняешь уникальными значениями, делаешь по нему уникальный индекс, делаешь поле NOT NULL поправляя запись домена и потом объявляешь что это поле PK. Должно прокатить.
← →
Piter © (2004-12-20 22:59) [87]AlterEgo of WondeRu © (20.12.04 21:21) [83]
это первый селект из таблицы?
естественно! Я что, такой дурак, чтобы всем талдычить про первый запуск, а самому делать по другому?
Более того, я это уже писал в самом начале, так что вместо того, чтобы допрашивать можно хотя бы чуть чуть почитать, что я пишу. Я писал, что SELECT * выполняется очень быстро. И если даже выполнить Count * ПОСЛЕ Select * - то все равно 4 секунды...
У вас не так?
Sergey_Masloff (20.12.04 21:29) [86]
поле NOT NULL поправляя запись домена
а в этом месте можно поподробнее?
Sergey_Masloff (20.12.04 21:29) [86]
и потом объявляешь что это поле PK
а как объявить существующие поле, что оно PK?
← →
AlterEgo of WondeRu © (2004-12-20 23:39) [88]Piter © (20.12.04 22:59) [87]
Более того, я это уже писал в самом начале, так что вместо того, чтобы допрашивать можно хотя бы чуть чуть почитать, что я пишу. Я писал, что SELECT * выполняется очень быстро. И если даже выполнить Count * ПОСЛЕ Select * - то все равно 4 секунды...
У вас не так?
как ни странно... читал каждый пост!
может я не понимаю тебя, но не нада искать причину, делай так как работает!
нефиг делать count(*), делай select * from answers where n=0, а затем в Query (если конечно его используешь) проверяй свойство RecordCount!!!
← →
AlterEgo of WondeRu © (2004-12-20 23:47) [89]AlterEgo of WondeRu © (20.12.04 23:39) [88]
with Query2 do
begin
Close;
SQL.Clear;
SQL.Add("select * from answers where n=0");
Open;
RCount := RecordCount; //то что нада
end;
← →
Piter © (2004-12-21 00:11) [90]AlterEgo of WondeRu © (20.12.04 23:47) [89]
with Query2 do
begin
Close;
SQL.Clear;
SQL.Add("select * from answers where n=0");
Open;
RCount := RecordCount; //то что нада
end;
и типа сам то как думаешь - какой ответ получится если проверять RecordCount?
← →
AlterEgo of WondeRu © (2004-12-21 00:17) [91]Piter © (21.12.04 0:11) [90]
какой ответ получится если проверять RecordCount?
думаю тоже самое что и при count(*)! или я не прав?
← →
AlterEgo of WondeRu © (2004-12-21 00:22) [92]попробуй... хотя справка говорит:
Generally, an application should only use RecordCount with Paradox and dBASE tables.
← →
Piter © (2004-12-21 00:39) [93]AlterEgo of WondeRu © (21.12.04 0:17) [91]
или я не прав?
не прав
← →
Piter © (2004-12-21 00:40) [94]она у тебя ноль выдаст
← →
WondeRu © (2004-12-21 09:00) [95]Piter © (21.12.04 0:40) [94]
она у тебя ноль выдаст
ты пробовал?????
← →
WondeRu © (2004-12-21 09:00) [96]Piter © (21.12.04 0:40) [94]
она у тебя ноль выдаст
ты пробовал?????
← →
jack128 © (2004-12-21 11:13) [97]WondeRu © (21.12.04 9:00) [96]
для IBX RecordCount - это кол-во отфетчиных записей. Для коректной работы нужно в [89] после Open добавить FetchAll. Только вот бредовый это способ...
← →
WondeRu © (2004-12-21 11:27) [98]jack128 © (21.12.04 11:13) [97]
Только вот бредовый это способ...
если он быстрее будет работать, тогда чего мучаться??
← →
sniknik © (2004-12-21 11:49) [99]> а попробуй еще раз - мне кажется ты ошибся. Ибо даже на 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; (закачки на клиента))
← →
Zacho © (2004-12-21 11:53) [100]WondeRu © (21.12.04 11:27) [98]
Не будет он быстрее работать. Ну, разве что, в каких-либо совсем экзотических случаях.
Кстати, я регулярно использую FetchAll и RecordCount для отчетов. Все равно весь резалтсет фетчить, так заче ещё один запрос ?
← →
Anatoly Podgoretsky © (2004-12-21 13:13) [101]Имено так, плюс сумма выполнения обеих запросов, плюс возможное расхождения количества, по первому и второму запросу (для embeded неважно). И насчет скорости select я думаю тоже лукавит, наверняка серверный курсор и эта скорость только скорость выборки очень небольшой части данных, а не всего запроса.
← →
Piter © (2004-12-21 21:42) [102]Anatoly Podgoretsky © (21.12.04 13:13) [101]
И насчет скорости select я думаю тоже лукавит, наверняка серверный курсор и эта скорость только скорость выборки очень небольшой части данных
вполне может быть. Я четко писал что делал - выполнял выражение "SELECT * FROM TestTable" из IBConsole и приводил его статистику.
← →
Piter © (2005-01-03 15:43) [103]up
← →
DrPass © (2005-01-03 19:32) [104]Ты все ж таки попробуй поработать с файловой системой - сперва выполни дефрагментацию диска, на котором лежит база, а после этого - backup-restore самой базы.
← →
Zacho © (2005-01-03 21:05) [105]Piter © (03.01.05 15:43) [103]
И ащё - ПК сделай наконец, да ?
Sorry, Миша, пьян я счас...
А воообще, зачем up ? Усё уже разжевали...
← →
Sergey_Masloff (2005-01-03 21:07) [106]Zacho © (03.01.05 21:05) [105]
>И ащё - ПК сделай наконец, да ?
Уже сделал он же ж ;-). Ускорение было но недостаточное. Хотя в цифрах бы... Желательно на таблице тысяч 500 записей.
← →
Zacho © (2005-01-03 21:35) [107]Sergey_Masloff (03.01.05 21:07) [106]
Я действительно счас пьян, но как не пытался, такого получить не смог. И в трезвом виде тоже не смог :)
← →
Sergey_Masloff (2005-01-03 21:56) [108]Zacho © (03.01.05 21:35) [107]
>И в трезвом виде тоже не смог :)
Я тоже не смог хотя вообще практически не пью. Но пациент упорствует в ереси. Может какой-то редкий случай?
← →
Zacho © (2005-01-03 22:13) [109]Sergey_Masloff (03.01.05 21:56) [108]
Мне это тоже крайне любопытно :)
← →
DrPass © (2005-01-04 00:19) [110]Если бы оный пациент покромсал свою прогу и базу, да выложил ее для тестов, все бы решилось в момент. А вообще - побить его да выгнать, дабы не мешал людям новогодние праздники ощущать
Страницы: 1 2 3 вся ветка
Форум: "Базы";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
Память: 0.67 MB
Время: 0.046 c