powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Количество записей в таблице влияет на скорость
9 сообщений из 9, страница 1 из 1
Количество записей в таблице влияет на скорость
    #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
Количество записей в таблице влияет на скорость
    #39328438
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Freakmeister,

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

Покажите результат SHOW CREATE TABLE `wp_loans_stats`
И, да, индекса по полю loan_id (или начинающегося с этого поля) не хватает.
...
Рейтинг: 0 / 0
Количество записей в таблице влияет на скорость
    #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
Количество записей в таблице влияет на скорость
    #39329167
Freakmeister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё, нашёл где почитать: http://www.mysql.ru/docs/man/MySQL_indexes.html
Прошу прощения за глупые вопросы, я не опытный кодер.)
Надо будет ещё про "первичный" ключ почитать, надеюсь я его в остальных таблицах правильно расставил.
...
Рейтинг: 0 / 0
Количество записей в таблице влияет на скорость
    #39329296
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нафига тебе ДВА индекса по полю id?
...
Рейтинг: 0 / 0
Количество записей в таблице влияет на скорость
    #39329319
Freakmeister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, в смысле? Я через phpMyAdmin базу создавал, у меня на поле id висит "первичный" и "индекс". Так делать не правильно?
http://dl2.joxi.net/drive/2016/10/18/0001/2051/108547/47/0a79b3b965.png
...
Рейтинг: 0 / 0
Количество записей в таблице влияет на скорость
    #39329340
retvizan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Freakmeister,

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

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

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


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