请教复合索引的问题

SELECT id FROM keywords WHERE u_id='40' AND site_id='1' AND status=1;
上面的语句中增加复合索引的话,还需要把id也加上吗?id是主键

ALTER TABLE keywords ADD INDEX iuss ( id,u_id, site_id, status)
ALTER TABLE keywords ADD INDEX uss ( u_id, site_id, status)
上面这两个哪个对?

另外对于顺序有要求吗?比如site_id跟status顺序换一下,会不会不走索引了呢

阅读 1.7k
3 个回答

复合索引,遵循最左原则,u_id, site_id, status 这个是对的,主键不需要加上,你where条件根本没有id这个条件

第二个对的。复合索引主要是在不同的查询场景下,查询条件会有重叠的情况使用。从而达到一个索引覆盖到多个查询场景

最左原则,第二种设计是对的,但是where中必须要有u_id这个条件才能用到索引,可以用explain sql语句来查看是否有用到索引。

推荐问题