在某些情况下,我们给表添加的索引mysql的优化器并不认为他是高效的,但经过我们使用explain关键字发现,我们自己添加的索引的查询效率要高,这时候,我们就可以使用 FORCE INDEX(index_name)语法来强制指定我们自己创建的某个索引。
示例:
有表如下:
CREATE TABLE `tb_user` (
`id` bigint(20) NOT NULL,
`user_name` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `user_name` (`user_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
我们先根据id正常查询,如下:
SELECT id,user_name FROM tb_user WHERE id = 1;
使用explain关键字分析,如下:
EXPLAIN SELECT id,user_name FROM tb_user WHERE id = 1;
可以发现,这次查询我们使用的是主键索引。
我们可以使用FORCE INDEX(index_name)来强制指定索引,如下:
EXPLAIN SELECT id, user_name FROM tb_user FORCE INDEX(user_name) WHERE id = 1
可以看到,我们成功指定了其他索引。
以上的例子不太切合实际,主要是讲怎么使用FORCE INDEX(index_name)来强制指定索引,大家使用的时候还是要结合实际情况来看。