给evaluation创建组合索引multi_index,顺序是product_id,user_id,mcn_id ,这个表一共有四个索引,
因为product_id满足最左匹配原则,就不需要再给product_id创建索引了,可以给user_id,mcn_id创建索引吧?
EXPLAIN SELECT * from evaluation WHERE id =2 -- 走主键索引
EXPLAIN SELECT * from evaluation WHERE product_id =2 -- key=multi_indix,type=ref
EXPLAIN SELECT * from evaluation WHERE user_id =2 -- type=all
EXPLAIN SELECT * from evaluation WHERE mcn_id =2 -- type=all
在您提供的数据中,执行了三个 EXPLAIN SELECT 语句来分析查询计划的类型。这些查询使用了不同的索引,并产生了不同的结果。
第一个 EXPLAIN SELECT 语句使用了主键索引,结果为 type=ref。
第二个 EXPLAIN SELECT 语句使用了组合索引 multi_index,结果为 type=range。这表明该索引适用于带有 product_id 条件的查询。
第三个和第四个 EXPLAIN SELECT 语句分别使用了 user_id 和 mcn_id 索引,结果为 type=all。这表明没有适用的索引来支持这些查询,表必须被完全扫描以执行查询。因此,为了提高查询效率,您可以考虑为这两个字段创建单独的索引。
不知道你这个问题是否已经解决, 如果还没有解决的话:从你给出的信息来看,我们并不能明确回答需要哪些字段创建索引,因为这需要根据具体的查询需求来确定。但是,我们可以给出一些建议来帮助你决定。
通过你提到的最左匹配原则,我们可以知道如果查询条件中包含了索引的前缀字段,那么这个索引就可以被使用。因此,对于你创建的这个组合索引multi_index,如果查询中需要使用的条件是由product_id开始的,那么这个组合索引就可以被使用。如果查询需要使用的条件是由user_id或者mcn_id开始的,那么这个索引就不能被使用,需要单独再为这两个字段创建索引。
另外,如果查询中出现了需要使用的字段没有被覆盖到的情况,那么就需要再为这些字段创建单独的索引。但是具体需要创建哪些索引,还是需要结合你的业务需求来确定。
最后,需要注意的是,要避免过多地创建索引,因为索引会占用额外的空间,对写入性能也会有一定的影响。因此,需要在保证查询性能的前提下,尽量减少索引的数量。