powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Долгий запрос
14 сообщений из 14, страница 1 из 1
Долгий запрос
    #38535671
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
CREATE TABLE test.fh_download (
  id int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  ip int(10) UNSIGNED NOT NULL,

  ..............

  PRIMARY KEY (id, date),
  INDEX IDX_fh_download (ip, user_file_id, date),
  INDEX IX_download_copy_type_date (type, date),
  INDEX IX_download_date_file (date, ip, project_name, type, file_id),
  INDEX IX_download_date_user_file (date, user_file_id),
  INDEX IX_download_ip (ip, status),
  INDEX IX_status (status, user_id),
  INDEX IX_test (file_owner_id, status, ip, user_id, date),
  UNIQUE INDEX IX_unique_key (unique_key, date)
)
ENGINE = INNODB
AUTO_INCREMENT = 222476207
AVG_ROW_LENGTH = 103
CHARACTER SET latin1
COLLATE latin1_swedish_ci
PARTITION BY RANGE (DAYOFWEEK(date))
(
PARTITION p00 VALUES LESS THAN (2)
ENGINE = INNODB,
PARTITION p01 VALUES LESS THAN (3)
ENGINE = INNODB,
PARTITION p02 VALUES LESS THAN (4)
ENGINE = INNODB,
PARTITION p03 VALUES LESS THAN (5)
ENGINE = INNODB,
PARTITION p04 VALUES LESS THAN (6)
ENGINE = INNODB,
PARTITION p05 VALUES LESS THAN (7)
ENGINE = INNODB,
PARTITION p06 VALUES LESS THAN (8)
ENGINE = INNODB
);




Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT SQL_NO_CACHE * 
  FROM `fh_download` `t` 
   FORCE INDEX (IX_download_date_file)
  WHERE t.project_name = 'xxx'
  AND ip = INET_ATON('127.0.0.1')
  AND date > NOW() - INTERVAL 1 DAY
  ORDER BY type = "free" DESC, date DESC LIMIT 1;



А таблице 12кк записей сейчас, запрос выполняется 2 секунды почти. Если индекс не указываю принудительно, то использует IX_download_date_user_file (date, user_file_id)
...
Рейтинг: 0 / 0
Долгий запрос
    #38535680
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Зачем date втащили в первчиный ключ?
2) Почему поля project_name и type не нормализованы?

Я бы предложил попробовать один из таких индексов:
(project_name, ip, date)
(project_name, ip, type, date)
(ip, project_name, date)
(ip, project_name, type, date)
Какой из них окажется лучше сильно зависит от распределения данных. При прочих равных лучше создавать более короткий индекс.
...
Рейтинг: 0 / 0
Долгий запрос
    #38535842
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Партиционирование по полю даты требует наличие соотвествующего поля в первичном ключе
2. ENUM там

Как я понял индекс по date нужно использовать в начале, т.к. по нему партиционирование.
...
Рейтинг: 0 / 0
Долгий запрос
    #38535844
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как бы в эксплейне не вижу даже, чтобы много записей затрагивало
...
Рейтинг: 0 / 0
Долгий запрос
    #38536015
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett,

1.
скорее всего НОВ() - интервал 1 дей вычислится один раз,
но на всякий проверьте что буддет если задать
константой вчерашний день

2. если в таблице БЛОБы КЛОБы ?
если есть то быстрее будет выбрать ИД
и потом единственый ИД (выбраный по ЛИМИТ 1)
зажоинить на таблицу

3. проанализируйте данные:

select
DAYOFWEEK(date) dow,
count(1)
group by 1

select
DATE(date) dd,
count(1)
group by 1

select
ip,
count(1)
group by 1

select
project_name, type
count(1)
group by 1,2
...
Рейтинг: 0 / 0
Долгий запрос
    #38536278
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Ничего не дает, чем меньше ставлю дату, тем дольше выполняется запрос.
2. Неа, длина строки статичная


Данные в принципе как данные, примерно равномерно все :)
...
Рейтинг: 0 / 0
Долгий запрос
    #38536325
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftЯ бы предложил попробовать один из таких индексов:
(project_name, ip, date)
(project_name, ip, type, date)
(ip, project_name, date)
(ip, project_name, type, date)
Какой из них окажется лучше сильно зависит от распределения данных. При прочих равных лучше создавать более короткий индекс.

хммм, если дата в конце, то он юзает индекс
...
Рейтинг: 0 / 0
Долгий запрос
    #38536330
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettmiksoftЯ бы предложил попробовать один из таких индексов:
(project_name, ip, date)
(project_name, ip, type, date)
(ip, project_name, date)
(ip, project_name, type, date)
Какой из них окажется лучше сильно зависит от распределения данных. При прочих равных лучше создавать более короткий индекс.

хммм, если дата в конце, то он юзает индексНу в начале от нее точно пользы не будет.
...
Рейтинг: 0 / 0
Долгий запрос
    #38536356
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому что не точное соответствие ищется?
...
Рейтинг: 0 / 0
Долгий запрос
    #38536358
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hettпотому что не точное соответствие ищется?Да, потому что поиск по диапазону. Да и в сортировке она потом участвует.
...
Рейтинг: 0 / 0
Долгий запрос
    #38537289
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett....
Данные в принципе как данные, примерно равномерно все :)

Дело не в равномерности, а в кардинальности разных
критериев поиска.
У вас в WHERE есть несколько критериев,
кто по равенству, кто по ренжу (участку).
Если хотите серьезно подойти -- начинайте
с анализа данных.
...
Рейтинг: 0 / 0
Долгий запрос
    #38537323
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я понял предлагается в начало ключа ставить более-повторяющиеся данные, и так далее по убыванию?
...
Рейтинг: 0 / 0
Долгий запрос
    #38537329
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettКак я понял предлагается в начало ключа ставить более-повторяющиеся данные, и так далее по убыванию?Нет, в начало те, по которым поиск идет по строгому равенству.
...
Рейтинг: 0 / 0
Долгий запрос
    #38537331
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hettв начало ключа ставить более-повторяющиеся данныенаоборот
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Долгий запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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