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个值之一)。因此,在此处似乎没有使用添加索引/全文本索引的功能。但是数据可能非常庞大,并且查询中可能存在多个约束。什么是优化查询的好方法?
答案 0 :(得分:1)
对于此查询:
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
被声明为主键,那么您可能已经有了第二个。
答案 1 :(得分:1)
另一个建议是对platform_origin进行检查约束,使其仅具有4个可能的值
如果您的版本允许,如果在platform_origin列上具有直方图,这也将有所帮助。如果列中的值存在数据偏斜,这将为优化器提供更多输入,同时创建最佳计划。
请看以下链接。