Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Долгий запрос / 14 сообщений из 14, страница 1 из 1
23.01.2014, 15:01:26
    #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
23.01.2014, 15:10:20
    #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
23.01.2014, 17:18:44
    #38535842
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгий запрос
1. Партиционирование по полю даты требует наличие соотвествующего поля в первичном ключе
2. ENUM там

Как я понял индекс по date нужно использовать в начале, т.к. по нему партиционирование.
...
Рейтинг: 0 / 0
23.01.2014, 17:19:14
    #38535844
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгий запрос
Как бы в эксплейне не вижу даже, чтобы много записей затрагивало
...
Рейтинг: 0 / 0
23.01.2014, 19:49:36
    #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
24.01.2014, 08:17:33
    #38536278
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долгий запрос
1. Ничего не дает, чем меньше ставлю дату, тем дольше выполняется запрос.
2. Неа, длина строки статичная


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

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

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

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


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