powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса
11 сообщений из 11, страница 1 из 1
Оптимизация запроса
    #39192004
udzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, форумчане!
В последнее время стандартный скрипт для выгрузки пользовательских входов в систему стал очень долго отрабатывать, обычно запрашиваются данные за месяц.
Время отработки в 15 минут выглядит как-то грустно.
Есть у кого-то предложения по оптимизации?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select * from openquery (**БД**, 'select
  pin_eq as "Пин",
  count(*) AS "Количество входов"
from log xc
where xc.user not in (''спец.учетка1'',''спец.учетка1'',''спец.учетка2'',''спец.учетка3'',''спец.учетка4'')
and xc.service_name like ''WSCustomerSearchClients%''
and xc.operation in(''AUTH'')
  AND xc.source = ''BACKEND''
  AND xc.destination = ''SERVICE''
and ts >= UNIX_TIMESTAMP(str_to_date(''01.02.16'',''%d.%m.%y''))*1000
and ts < UNIX_TIMESTAMP(str_to_date(''29.02.16'',''%d.%m.%y''))*1000
 group by pin_eq')


Заранее благодарен за помощь!
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39192018
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
udzhin,

индексы на таблице какие?
explain показать можете?
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39192029
udzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

Код: sql
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.
*.log (
  id int(11) NOT NULL AUTO_INCREMENT,
  request_uid varchar(64) DEFAULT NULL COMMENT 'Хэш для ид',
  ts bigint(20) DEFAULT NULL COMMENT 'Текущее время в миллисекундах',
  environment varchar(64) DEFAULT NULL COMMENT 'среда',
  backend_system varchar(64) DEFAULT NULL,
  app_client varchar(64) DEFAULT NULL COMMENT 'Имя приложения с версией, которое запросило данные',
  app_os varchar(64) DEFAULT NULL COMMENT 'ОС',
  req_id int(11) DEFAULT NULL COMMENT 'Идентификатор пакета',
  ip_address varchar(64) DEFAULT NULL COMMENT 'IP',
  mac_address varchar(64) DEFAULT NULL COMMENT 'MAC',
  user varchar(64) DEFAULT NULL,
  source varchar(64) DEFAULT NULL COMMENT 'FRONTEND, BACKEND, SERVICE',
  destination varchar(64) DEFAULT NULL COMMENT 'FRONTEND, BACKEND, SERVICE',
  operation varchar(64) DEFAULT NULL,
  result_code int(11) DEFAULT NULL COMMENT 'Результирующий код (отрицательное значение означает ошибку)',
  message longtext DEFAULT NULL,
  model varchar(255) DEFAULT NULL COMMENT 'Наименование модели мобильного устройства',
  service_name varchar(128) DEFAULT NULL COMMENT 'Имя вызываемого сервиса',
  pin_eq varchar(64) DEFAULT NULL COMMENT 'Pin',
  imei varchar(30) DEFAULT NULL COMMENT 'IMEI',
  phone_number varchar(20) DEFAULT NULL COMMENT 'номер',
  sim_number varchar(20) DEFAULT NULL COMMENT 'симка',
  jailbreak tinyint(1) DEFAULT NULL COMMENT 'Признак jb',
  PRIMARY KEY (id),
  INDEX IX_log_ts (ts)
)
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39192056
udzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

по explain есть небольшая сложность, сейчас постараюсь оформить
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39192068
udzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

explain показать увы не смогу, запрос написан через openquery, а работаю в microsoft sql server management studio.
Из-за openquery не могу и Analyze Query in Database Engine Tuning Advisor воспользоваться
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39192072
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
udzhinработаю в microsoft sql server management studio
Ну так задавайте вопрос в ветке MS SQL, а не MySQL...

Впрочем, на ненормализованных и неиндексированных данных ждать хоть какого-то улучшения бессмысленно.
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39192086
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
udzhinexplain показать увы не смогу, запрос написан через openqueryНу тогда скажите хотя бы, сколько записей попадает под условие отбора, т.е.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select
  count(*)
from log xc
where xc.user not in (''спец.учетка1'',''спец.учетка1'',''спец.учетка2'',''спец.учетка3'',''спец.учетка4'')
and xc.service_name like ''WSCustomerSearchClients%''
and xc.operation in(''AUTH'')
  AND xc.source = ''BACKEND''
  AND xc.destination = ''SERVICE''
and ts >= UNIX_TIMESTAMP(str_to_date(''01.02.16'',''%d.%m.%y''))*1000
and ts < UNIX_TIMESTAMP(str_to_date(''29.02.16'',''%d.%m.%y''))*1000
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39192098
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
udzhinобычно запрашиваются данные за месяц.udzhin
Код: sql
1.
2.
and ts >= UNIX_TIMESTAMP(str_to_date(''01.02.16'',''%d.%m.%y''))*1000
and ts < UNIX_TIMESTAMP(str_to_date(''29.02.16'',''%d.%m.%y''))*1000

Так вы последний день февраля потеряете. Там надо 1 марта ставить.
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39192190
udzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftudzhinобычно запрашиваются данные за месяц.udzhin
Код: sql
1.
2.
and ts >= UNIX_TIMESTAMP(str_to_date(''01.02.16'',''%d.%m.%y''))*1000
and ts < UNIX_TIMESTAMP(str_to_date(''29.02.16'',''%d.%m.%y''))*1000

Так вы последний день февраля потеряете. Там надо 1 марта ставить.

да это-то понятно, написал ведь "обычно" :)

tanglirudzhinexplain показать увы не смогу, запрос написан через openqueryНу тогда скажите хотя бы, сколько записей попадает под условие отбора, т.е.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select
  count(*)
from log xc
where xc.user not in (''спец.учетка1'',''спец.учетка1'',''спец.учетка2'',''спец.учетка3'',''спец.учетка4'')
and xc.service_name like ''WSCustomerSearchClients%''
and xc.operation in(''AUTH'')
  AND xc.source = ''BACKEND''
  AND xc.destination = ''SERVICE''
and ts >= UNIX_TIMESTAMP(str_to_date(''01.02.16'',''%d.%m.%y''))*1000
and ts < UNIX_TIMESTAMP(str_to_date(''29.02.16'',''%d.%m.%y''))*1000



в результирующей выгрузке за месяц без группировки - ~897 строк.
К слову добрался таки до самой БД, вот explain

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE xc range IX_log_ts IX_log_ts 9 (null) 3803496 Using where; Using temporary; Using filesort

На самой БД скрипт отработал за 3,5 минуты вместо 16,5...
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39192193
udzhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
897 тысяч*
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39192242
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А за сколько времени вы хотите, чтобы сервер вам вычитал, отсортировал и сгруппировал без малого миллион записей? Да ещё с промежуточной записью на диск...

PS. Реально записей около миллиона, а эксплейн показывает почти четыре. Что-то у вас не то со статистикой, впрочем, её пересбор мало чем поможет.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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