powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Тормозит простой запрос - помогите!
17 сообщений из 17, страница 1 из 1
Тормозит простой запрос - помогите!
    #34910033
yack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тупой запрос:
SELECT count(id) AS count FROM my_table WHERE verify=1
таблица с 90 000 записей.
Из них verify=1 имеют ~88000 записей
Работает около 5 секунд.

Как можно ускорить?
...
Рейтинг: 0 / 0
Тормозит простой запрос - помогите!
    #34910108
Фотография Евгений Фадеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте индекс построить на (verify, id)
И план покажите.
...
Рейтинг: 0 / 0
Тормозит простой запрос - помогите!
    #34910305
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yackТупой запрос:
SELECT count(id) AS count FROM my_table WHERE verify=1
таблица с 90 000 записей.
Из них verify=1 имеют ~88000 записей
Работает около 5 секунд.

Как можно ускорить?А сколько должен работать?
Если у вас oltp, то просто не надо делать таких запросов (или добавить слабую сущность), если dss то 5 сек. можно подождать.
...
Рейтинг: 0 / 0
Тормозит простой запрос - помогите!
    #34910583
victor16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Евгений Фадеев
Попробуйте индекс построить на (verify, id).

Неплохо также
Код: plaintext
1.
UPDATE STATISTICS HIGH FOR TABLE my_table (id,verify)
...
Рейтинг: 0 / 0
Тормозит простой запрос - помогите!
    #34911069
yack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UPDATE STATISTICS делаю регулярно.
Система OLTP (не OLAP).
Индекс по verify есть. Но он по сути ничего не дает, т.к. тормоз дает именно инкремент в count (тот же запрос, но с verify=0 выполняется в момент, т.к. таких записей всего около 2000)

При этом такая скорость выполнения никак не допустима, а запрос нужеен именно такой - испосьзуется для построения разбивки на страницы на веб.

План запроса прилагаю.
------
SELECT count(id) AS count FROM photos WHERE 1=verify

Estimated Cost: 75022
Estimated # of Rows Returned: 1

1) informix.photos: INDEX PATH

(1) Index Keys: verify (Serial, fragments: ALL)
Lower Index Filter: informix.photos.verify = 1
...
Рейтинг: 0 / 0
Тормозит простой запрос - помогите!
    #34911129
ak-47
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИз них verify=1 имеют ~88000 записей

авторEstimated # of Rows Returned: 1

Все нормально со статистикой?
...
Рейтинг: 0 / 0
Тормозит простой запрос - помогите!
    #34911224
yack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Внимательнее:
SELECT count как раз и возвращает 1 запись с кол-вом.
...
Рейтинг: 0 / 0
Тормозит простой запрос - помогите!
    #34911241
victor16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Время работы менее 1 секунды на любых серверах. Проверьте
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
-- drop table my_table;
create table my_table (
  id serial not null, 
  verify integer not null,
  check (verify in ( 0 , 1 )),
  primary key (id));
insert into my_table (verify) values ( 0 );
insert into my_table (verify) select verify from my_table;
insert into my_table (verify) select verify from my_table;
insert into my_table (verify) select verify from my_table;
insert into my_table (verify) select verify from my_table;
insert into my_table (verify) select verify from my_table;
insert into my_table (verify) select verify from my_table;
insert into my_table (verify) select verify from my_table;
insert into my_table (verify) select verify from my_table;
insert into my_table (verify) select verify from my_table;
insert into my_table (verify) select verify from my_table;
insert into my_table (verify) select verify from my_table;

insert into my_table (verify) values ( 1 );
insert into my_table (verify) select verify from my_table where verify =  1 ;
insert into my_table (verify) select verify from my_table where verify =  1 ;
insert into my_table (verify) select verify from my_table where verify =  1 ;
insert into my_table (verify) select verify from my_table where verify =  1 ;
insert into my_table (verify) select verify from my_table where verify =  1 ;
insert into my_table (verify) select verify from my_table where verify =  1 ;
insert into my_table (verify) select verify from my_table where verify =  1 ;
insert into my_table (verify) select verify from my_table where verify =  1 ;
insert into my_table (verify) select verify from my_table where verify =  1 ;
insert into my_table (verify) select verify from my_table where verify =  1 ;
insert into my_table (verify) select verify from my_table where verify =  1 ;
insert into my_table (verify) select verify from my_table where verify =  1 ;
insert into my_table (verify) select verify from my_table where verify =  1 ;
insert into my_table (verify) select verify from my_table where verify =  1 ;
insert into my_table (verify) select verify from my_table where verify =  1 ;
insert into my_table (verify) select verify from my_table where verify =  1 ;
insert into my_table (verify) select verify from my_table where verify =  1 ;

select verify,count(*) from my_table group by  1 ;
select unique current from systables;
select count(id) from my_table where  1 =verify;
select unique current from systables;

...
Рейтинг: 0 / 0
Тормозит простой запрос - помогите!
    #34911260
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yack
SELECT count(id) AS count FROM photos WHERE 1=verify
count(*)

Я бы завел таблицу гдебы хранил число, и поддерживал триггерами
...
Рейтинг: 0 / 0
Тормозит простой запрос - помогите!
    #34911264
yack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select count(id) from my_table where 1=verify; - так я пробовал, но результат тот же.

select verify,count(*) from my_table group by 1; - а вот это очень хорошО, спасибо большое за идею.
Буду теперь думать, как это заюзать в прикладухе.
...
Рейтинг: 0 / 0
Тормозит простой запрос - помогите!
    #34911269
yack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев Денис yack
SELECT count(id) AS count FROM photos WHERE 1=verify
count(*)

Я бы завел таблицу гдебы хранил число, и поддерживал триггерами

Тут есть проблемы - этот count(id) в ряде имеет около 10 дополнительных WHERE в запросе, для каждого из которых хранить статистику не представляется разумным :)
...
Рейтинг: 0 / 0
Тормозит простой запрос - помогите!
    #34911293
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yackТут есть проблемы - этот count(id)Вы понимаете чем отличается count(id) от count(*) ?

yack в ряде имеет около 10 дополнительных WHERE в запросе, для каждого из которых хранить статистику не представляется разумным :)Ничего не понял.
...
Рейтинг: 0 / 0
Тормозит простой запрос - помогите!
    #34911304
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати про разбивку на страницы.

Поисковики на самом деле когда показывают 10 20 30 40 ... 110, показывают неточные числа.

например видим 6 страниц, но на самом деле их 2.
...
Рейтинг: 0 / 0
Тормозит простой запрос - помогите!
    #34911366
yack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев ДенисКстати про разбивку на страницы.

Поисковики на самом деле когда показывают 10 20 30 40 ... 110, показывают неточные числа.

например видим 6 страниц, но на самом деле их 2.

Хороший пример, никогда не обращал внимания
...
Рейтинг: 0 / 0
Тормозит простой запрос - помогите!
    #34912240
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yackUPDATE STATISTICS делаю регулярно.
Система OLTP (не OLAP).
Индекс по verify есть. Но он по сути ничего не дает, т.к. тормоз дает именно инкремент в count (тот же запрос, но с verify=0 выполняется в момент, т.к. таких записей всего около 2000)

При этом такая скорость выполнения никак не допустима, а запрос нужеен именно такой - испосьзуется для построения разбивки на страницы на веб.

План запроса прилагаю.
------
SELECT count(id) AS count FROM photos WHERE 1=verify

Estimated Cost: 75022
Estimated # of Rows Returned: 1

1) informix.photos: INDEX PATH

(1) Index Keys: verify (Serial, fragments: ALL)
Lower Index Filter: informix.photos.verify = 1

yackUPDATE STATISTICS делаю регулярно.
Система OLTP (не OLAP).
Индекс по verify есть. Но он по сути ничего не дает, т.к. тормоз дает именно инкремент в count (тот же запрос, но с verify=0 выполняется в момент, т.к. таких записей всего около 2000)

При этом такая скорость выполнения никак не допустима, а запрос нужеен именно такой - испосьзуется для построения разбивки на страницы на веб.

План запроса прилагаю.
------
SELECT count(id) AS count FROM photos WHERE 1=verify

Estimated Cost: 75022
Estimated # of Rows Returned: 1

1) informix.photos: INDEX PATH

(1) Index Keys: verify (Serial, fragments: ALL)
Lower Index Filter: informix.photos.verify = 1

Есть несколько моментов:

1. Откажитесь от использования индекса через хинт.
В данном случае будет производиться полное сканирование таблицы при этом скорость чтения
страниц таблицы( с данными) с диска будет производиться быстрее.
В случае индексного поиска Informix читает одну страницу за одну операцию ввода вывода.
в случае full scan, он читает за одну дисковую операцию столько страниц сколько ему позволяет ОС.

2. Прислушайтесь к замечанию Дениса
автор
Вы понимаете чем отличается count(id) от count(*) ?

Я не знаю так глубоко тонкости работы оптимизатора , но по логике, если вы защитите
поле id not null констраинтом оптимизатор будет ( по логике должен) для получения
результатов запроса использовать только индекс, не обращаясь к страницам данных.

3. При проектирование OLTP системы нужно учитывать, что индексный поиск должен
работать с полями и значениями с максимально высокой селективностью.
Если это Ваша разработка подумайте над дизайном.
...
Рейтинг: 0 / 0
Тормозит простой запрос - помогите!
    #34912340
Leonid Vorontsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может я чего-то и не понимаю, но по-моему, надо считать не COUNT( id ), COUNT( verify ) - тогда в плане появится волшебное (Key-Only)...
...
Рейтинг: 0 / 0
Тормозит простой запрос - помогите!
    #34913238
yack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем! Проблема была как раз в плоскости count(id) от count(*)
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Тормозит простой запрос - помогите!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]