Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Количество записей в таблице влияет на скорость / 9 сообщений из 9, страница 1 из 1
17.10.2016, 17:25
    #39328434
Freakmeister
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей в таблице влияет на скорость
Добрый день. У меня такая проблема - есть очень громоздкая PHP-функция расчёта статистики по займам. Там на столько сложный алгоритм, что этот скрипт не может выполниться за раз, и пришлось для него написать кэш. Сейчас в таблице с кэшем 179579 записей и скрипт выборки из кэша почему-то работает медленно. Как только я эту таблицу очищаю, всё начинает работать гораздо быстрее. Почему такое может происходить? Дамп структуры таблицы выглядит так:

Код: 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.
CREATE TABLE `wp_loans_stats` (
  `id` int(8) NOT NULL,
  `loan_id` int(8) NOT NULL,
  `amount` int(8) NOT NULL,
  `close_days` text NOT NULL,
  `payments_sum` int(8) NOT NULL,
  `date` date NOT NULL COMMENT 'local',
  `day` int(5) NOT NULL,
  `percent` varchar(10) NOT NULL,
  `percent_rub` int(5) NOT NULL,
  `percent_rub_sum` int(8) NOT NULL,
  `percent_month` varchar(10) NOT NULL,
  `percent_year` varchar(10) NOT NULL,
  `proffit` int(8) NOT NULL,
  `expired_days` int(5) NOT NULL,
  `expired` tinyint(1) NOT NULL,
  `last_day_plus` datetime NOT NULL,
  `last_doc_back_date` date NOT NULL,
  `days_till_end` int(5) NOT NULL,
  `percent_sum` int(5) NOT NULL,
  `remind_date` date NOT NULL,
  `output` text NOT NULL,
  `stats` text NOT NULL,
  `periods_counter` int(3) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `wp_loans_stats`
  ADD PRIMARY KEY (`id`),
  ADD KEY `id` (`id`);

ALTER TABLE `wp_loans_stats`
  MODIFY `id` int(8) NOT NULL AUTO_INCREMENT;



Сама выборка выглядит довольно простецки:
Код: sql
1.
SELECT * FROM `wp_loans_stats` WHERE `loan_id`={$row['id']} ORDER BY `day`
...
Рейтинг: 0 / 0
17.10.2016, 17:28
    #39328438
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей в таблице влияет на скорость
Freakmeister,

так индексы-то где?
...
Рейтинг: 0 / 0
17.10.2016, 17:44
    #39328451
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей в таблице влияет на скорость
Freakmeister,

Покажите результат SHOW CREATE TABLE `wp_loans_stats`
И, да, индекса по полю loan_id (или начинающегося с этого поля) не хватает.
...
Рейтинг: 0 / 0
18.10.2016, 17:00
    #39329156
Freakmeister
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей в таблице влияет на скорость
Melkij, индекс стоит на id, разве этого не достаточно? Я подумал что в loan_id он не нужен, потому что там встречаются не уникальные значения. Где про это почитать?)

miksoft, вот:
Код: 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.
CREATE TABLE `wp_loans_stats` (
 `id` int(8) NOT NULL AUTO_INCREMENT,
 `loan_id` int(8) NOT NULL,
 `amount` int(8) NOT NULL,
 `close_days` text NOT NULL,
 `payments_sum` int(8) NOT NULL,
 `date` date NOT NULL COMMENT 'local',
 `day` int(5) NOT NULL,
 `percent` varchar(10) NOT NULL,
 `percent_rub` int(5) NOT NULL,
 `percent_rub_sum` int(8) NOT NULL,
 `percent_month` varchar(10) NOT NULL,
 `percent_year` varchar(10) NOT NULL,
 `proffit` int(8) NOT NULL,
 `expired_days` int(5) NOT NULL,
 `expired` tinyint(1) NOT NULL,
 `last_day_plus` datetime NOT NULL,
 `last_doc_back_date` date NOT NULL,
 `days_till_end` int(5) NOT NULL,
 `percent_sum` int(5) NOT NULL,
 `remind_date` date NOT NULL,
 `output` text NOT NULL,
 `stats` text NOT NULL,
 `periods_counter` int(3) NOT NULL,
 PRIMARY KEY (`id`),
 KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=208031 DEFAULT CHARSET=utf8
...
Рейтинг: 0 / 0
18.10.2016, 17:14
    #39329167
Freakmeister
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей в таблице влияет на скорость
Всё, нашёл где почитать: http://www.mysql.ru/docs/man/MySQL_indexes.html
Прошу прощения за глупые вопросы, я не опытный кодер.)
Надо будет ещё про "первичный" ключ почитать, надеюсь я его в остальных таблицах правильно расставил.
...
Рейтинг: 0 / 0
18.10.2016, 19:42
    #39329296
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей в таблице влияет на скорость
А нафига тебе ДВА индекса по полю id?
...
Рейтинг: 0 / 0
18.10.2016, 20:37
    #39329319
Freakmeister
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей в таблице влияет на скорость
Akina, в смысле? Я через phpMyAdmin базу создавал, у меня на поле id висит "первичный" и "индекс". Так делать не правильно?
http://dl2.joxi.net/drive/2016/10/18/0001/2051/108547/47/0a79b3b965.png
...
Рейтинг: 0 / 0
18.10.2016, 21:28
    #39329340
retvizan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей в таблице влияет на скорость
Freakmeister,

PRIMARY KEY (`id`),
KEY `id` (`id`)

означает, что у вас два индекса по одному полю.

Представь, что таблица это книга, а индекс - алфавитный указатель.
Имеет ли смысл печатать в конце книги 2 алфавитных указателя?
...
Рейтинг: 0 / 0
19.10.2016, 00:27
    #39329430
Freakmeister
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей в таблице влияет на скорость
retvizan, ну то есть, первичный ключ выполняет функцию индекса, так?
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Количество записей в таблице влияет на скорость / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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