Индекс в столбце TEXT с определенным набором значений - PullRequest
0 голосов
/ 08 января 2019
mysql> describe marketing_details;
+--------------------------+---------------------+------+-----+------- 
------------+-----------------------------+
| Field                    | Type                | Null | Key | 
Default           | Extra                       |
+--------------------------+---------------------+------+-----+------- 
------------+-----------------------------+
| id                       | bigint(20)          | NO   | PRI | NULL              
| auto_increment              |
| platform_origin          | varchar(100)        | NO   | MUL |                   
|                             |
| partner_id               | bigint(20) unsigned | NO   | MUL | 0                 
|                             |
+--------------------------+---------------------+------+-----+------- 
------------+-----------------------------+

Для запроса типа

SELECT * 
FROM partners
INNER JOIN marketing_details ON partners.id = marketing_details.partner_id
where marketing_details.platform_origin IN ('platform_A', 'platform_B');

Столбец platform_origin может иметь набор определенных значений (одно из 4 значений). Таким образом, добавление индекса / полнотекстового индекса здесь, кажется, не имеет смысла. Но данные могут быть огромными, и в запросе может быть несколько ограничений. Что будет хорошим способом оптимизации запроса?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Другим предложением было бы иметь проверочное ограничение для platform_origin, чтобы иметь только 4 возможных значения

Также будет полезно, если у вас есть гистограммы в столбце platform_origin, если ваша версия позволяет. Это дало бы оптимизатору больше входных данных при создании оптимального плана, если в значениях в столбце имеются искажения данных.

Посмотрите на следующую ссылку.

https://mysqlserverteam.com/histogram-statistics-in-mysql/

0 голосов
/ 08 января 2019

Для этого запроса:

SELECT . . .
FROM partners p INNER JOIN
     marketing_details md
     ON p.id = md.partner_id 
WHERE md.platform_origin IN ('platform_A', 'platform_B');

Вы должны попробовать индексы:

  • marketing_details(platform_origin, partner_id)
  • partners(id)

Возможно, у вас уже есть второй, если id объявлен в качестве первичного ключа.

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