Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-1105998632
Константинов
2005-01-18 00:50
2005.02.06
Звонилки. Как с ними бороться?


1-1105772482
Александр1
2005-01-15 10:01
2005.02.06
Работа с Word


1-1106677375
0xfffffff
2005-01-25 21:22
2005.02.06
Добавление своей записи в Add remove programs


1-1106642719
Aleksandr.
2005-01-25 11:45
2005.02.06
Как создать две разные настройки Делфи?


14-1105970093
kaZaNoVa
2005-01-17 16:54
2005.02.06
Online проверка на вирусы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский