Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.06;
Скачать: CL | DM;

Вниз

Скорость выборки   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.68 MB
Время: 0.029 c
6-1101130745
alenika
2004-11-22 16:39
2005.02.06
Помогите с закачкой файла на сервер по ftp


1-1106317905
Zevs_a
2005-01-21 17:31
2005.02.06
Иерархические структуры


14-1105429185
leonidus
2005-01-11 10:39
2005.02.06
Не открываются chm-файлы


14-1103740532
Alexander Panov
2004-12-22 21:35
2005.02.06
Выборы в Украине. Противостояние. (Продолжение 5 - шестая ветка)


6-1100851087
Julia
2004-11-19 10:58
2005.02.06
Передача файла через прямое модемное соединение