在某些情况下,我们给表添加的索引mysql的优化器并不认为他是高效的,但经过我们使用explain关键字发现,我们自己添加的索引的查询效率要高,这时候,我们就可以使用 FORCE INDEX(index_name)语法来强制指定我们自己创建的某个索引。

示例:

有表如下:

mysql 强制要求主键 mysql强制指定索引_mysql

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;

mysql 强制要求主键 mysql强制指定索引_sql_02

可以发现,这次查询我们使用的是主键索引。

我们可以使用FORCE INDEX(index_name)来强制指定索引,如下:

EXPLAIN SELECT id, user_name FROM tb_user FORCE INDEX(user_name) WHERE id = 1

mysql 强制要求主键 mysql强制指定索引_公众号_03

可以看到,我们成功指定了其他索引。

以上的例子不太切合实际,主要是讲怎么使用FORCE INDEX(index_name)来强制指定索引,大家使用的时候还是要结合实际情况来看。

 

 

 

mysql 强制要求主键 mysql强制指定索引_主键_04