首页 > 数据库 >MySQL3种指定索引的方式

MySQL3种指定索引的方式

时间:2024-03-13 11:14:07浏览次数:24  
标签:index use MySQL3 指定 查询 索引 time

在使用MySQL进行查询时,我们经常会遇到SQL执行没有按照我们预想的那样去使用某个索引优化查询,那怎么解决这个问题呢?

对于这个问题,MySQL给我们准备了三个方法,这三个方法可以帮助我们让SQL执行按照我们预想的那样去选择索引。今天我们就针对这三个方法分别来说说吧!

  • use index:在你查询语句表名的后面,添加use index来提供你希望mysql去参考的索引列表,就可以让mysql不再考虑其他可用的索引。如:select * from table use index(name,age);
  • IGNORE INDEX: 提示会禁止查询优化器使用指定的索引。在具有多个索引的查询时,可以用来指定不需要优化器使用的那个索引,还可以在删除不必要的索引之前在查询中禁止使用该索引。如:select * from table ignore index(name,age);
  • force index:强制mysql使用一个特定的索引。一般情况下mysql会根据统计信息选择正确的索引,但是当查询优化器选择了错误的索引或根本没有使用索引的时候,这个提示将非常有用。

注意:use/ignore/force index(index) 括号里的index是索引名,而不是列名。而且后面必须要加上where条件

现在我们已经了解了MySQL提供的指定索引的三个方法,接下来我们就针对这三个方法来实验一下具体的操作及结果吧!

explain 
SELECT
	id,
	org_code,
	org_id,
	create_time,
	update_time
FROM
	db.t_data 
  -- ignore INDEX(
  force INDEX(
  -- use INDEX(
  medicare_settle_time_IDX
  -- , refund_settle_flag_IDX
  -- , is_local_reconcile_IDX
  )
WHERE
	is_deleted = 0
	AND (medicare_settle_time >= '2024-03-01 00:00:00'
		and medicare_settle_time <= '2024-03-01 23:59:59'
		AND refund_settle_flag = '0'
		AND is_local_reconcile = 1
		AND org_id = 20001001
		AND campus_id = 30001002
    )
ORDER BY id ASC
LIMIT 3600, 112;

总结一下:

1,【use index】没有指定索引会导致全表扫描,指定的索引关联的字段不在where条件中依然不使用索引,导致全表扫描。所以指定索引时注意索引关联的字段是否在where条件中。

2,【ignore index】必须设置索引名,否则会报错。禁用的索引一定导致索引失效,即使使用【use index】重新指定该索引也无效

3,【force index】必须指定索引名。强制指定的索引关联的字段不在where条件中,所有索引都将失效。而且不能与【use index】同时使用

标签:index,use,MySQL3,指定,查询,索引,time
From: https://www.cnblogs.com/JaxYoun/p/18070183

相关文章

  • mysql索引详解
    一、介绍索引是通过某种算法,构建出一个数据模型,用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数......
  • 索引
    索引是数据库中的一种数据结构,用于加快数据库查询的性能聚集索引和非聚集聚集索引InnoDB(AfterMysql5.5)就是聚集索引,InnoDB的所有搜索操作都会在主键索引构成的B+树上展开,如果没有主键那么就会选择一个Unique约束的字段作为索引,如果也没有,则会默认设置一个DB_ROW_ID作......
  • 【Mysql】事务与索引
    目录MySQL事务事务的特性并发事务的问题?事务隔离级别?MySQL索引数据结构索引类型聚簇索引与非聚簇索引聚集索引的优点聚集索引的缺点非聚集索引的优点非聚集索引的缺点非聚集索引一定回表查询吗(覆盖索引)?覆盖索引联合索引最左前缀匹配原则创建索引的注意事......
  • 复合索引和最左前缀原则
    复合索引复合索引是根据多个列创建的数据库索引。它们对于优化涉及这些列的查询性能非常有用。在创建复合索引时,这些列的顺序至关重要,因为它决定了数据库如何利用该索引。列的顺序确定复合索引中列的顺序时,应考虑以下因素:查询模式:考虑哪些列经常一起出现在WHERE子句中。选择......
  • 如何建立一个好的索引
    理解索引的类型:聚集索引:表中数据行的物理排序与键值的逻辑(索引)顺序相同。一个表只能有一个聚集索引。非聚集索引:索引包含键值和指向存储数据行的指针,而不是数据本身。选择正确的列进行索引:选择性高的列:索引的选择性是指不同值的数量与表中行数的比率。高选择性意味着索......
  • MySQL(八):MySQL之索引
    1、MySQL索引及作用MySQL官网:索引(Index)是帮助MySQL高效获取数据的数据结构。索引是数据结构。一个索引就是一个B+树,加快数据查询的速度。一个select查询语句在执行过程中一般最多能使用一个辅助索引,即使在where条件中用了多个辅助索引。2、InnoDB存储引擎支持的常见索......
  • SpringBoot自定义validation注解校验参数只能为指定的值
    需求:实体类中某个属性的值必须为指定的值,比如0或者1SpringBoot版本:2.4.8validation 依赖<!--数据校验--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>......
  • Gitlab如何将多个项目移动到指定目录/群组?
    将您的个人项目移至群组本教程将向您展示如何将个人项目移动到群组中。为什么群组很重要?在极狐GitLab中,使用群组可以同时管理一个或多个相关项目。群组具有很多的好处。例如,您可以:管理您的项目的权限。查看群组中项目的所有议题和合并请求。查看您命名空间中的所有项目......
  • mysql 索引
    索引是根据表中一列或若干列按照一定顺序建立的列值与记录行之间的对应关系的数据结构,通过索引查询可以提高查询的效率。举个例子:把一个数据表当做一个图书馆,数据表中的一行数据当做一本书,在没有索引的情况下,想要找某一本书时,几乎需要将整个图书馆的书找一遍。当建立了索引后,就......
  • Lucene轻量级搜索引擎,真的太强了!!!Solr 和 ES 都是基于它
    一、基础知识1、Lucene是什么Lucene是一个本地全文搜索引擎,Solr和ElasticSearch都是基于Lucene的封装Lucene适合那种轻量级的全文搜索,我就是服务器资源不够,如果上ES的话会很占用服务器资源,所有就选择了Lucene搜索引擎2、倒排索引原理全文搜索的原理是使用......