Мне нужно оптимизировать большую таблицу данных в базе данных MySQL - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть таблица в базе данных mysql с 6 миллионами строк данных.Структура ниже.В большинстве моих запросов выполняется поиск определенных полей «клиент» и отображается значение для каждого клиента в соответствии со значением в столбце «значение».Запрос выполняет поиск по всей таблице, чтобы найти тех клиентов, которые указаны в запросе.Эта таблица была довольно маленькой, но теперь она стала слишком большой, и мои запросы занимают довольно много времени, чтобы получить результаты.У меня следующие вопросы: если я создам отдельную таблицу, содержащую только поле клиента и индекс, то ускорит ли мой запрос клиента?

TABLE `data` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `entry_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `date` date DEFAULT NULL,
  `media_name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `media_type` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `rate` decimal(8,2) DEFAULT NUCREATELL,
  `value` decimal(8,2) DEFAULT NULL,
  `page` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `sector` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `category` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `customer` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `product` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `image_id` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `city` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `address` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `supplier` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `time` time DEFAULT NULL,
  `duration` time DEFAULT NULL,
  `promoted_on` datetime NOT NULL,
  `hasimage` tinyint(4) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

«Отдельная таблица», о которой вы думаете, должна быть индексом вашей главной таблицы.

CREATE INDEX index_name 
ON data(customer,value);

Это ускорит запросы и даже предотвратит доступ к самой таблице, за счетчуть более медленных операций INSERT и UPDATE.

0 голосов
/ 23 сентября 2019

Вам нужен индекс.

Если вы ищете клиентов, используя in или = (наиболее распространенные методы), то вы можете использовать стандартный индекс для customer.

Если у вас есть более сложные поиски - скажем, с использованием like с лидирующим подстановочным знаком - тогда это не работает.Полнотекстовый индекс может помочь.Или нет, в зависимости от характера запроса и данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...