暂无图片
Mysql SQL索引优化
我来答
分享
佳佳
2021-08-04
Mysql SQL索引优化

SELECT count(0) FROM table_name WHERE update_date < ‘2021-08-03 00:00:00.000’ AND create_date >= ‘2021-07-04 00:00:00.000’ AND state = ‘2’ AND type = 1;

如果是这种where后有2个字段的范围查询,是不是必定有一个不会走索引?
如何建索引比较好?

我来答
添加附件
收藏
分享
问题补充
7条回答
默认
最新

两个日期建 组合索引就行了.

暂无图片 评论
暂无图片 有用 0
打赏 0
佳佳

(type,state,update_date,create_date) 如果创建这样的索引,不会去走吧?感觉会终止于索引的update_date列,不会再去过滤create_date吧?

暂无图片 评论
暂无图片 有用 0
打赏 0
薛晓刚

就你这句而言, create_date >= ‘2021-07-04 00:00:00.0会用到。
但是另外一个不会,因为另外一个是全部数据。
优化器会识别的。

暂无图片 评论
暂无图片 有用 0
打赏 0
佳佳
升级问题到: 潜在风险
暂无图片 评论
暂无图片 有用 1
打赏 0
薛晓刚

type第一列几乎不会起作用,mysql没有跳跃索引,很难用到。

暂无图片 评论
暂无图片 有用 0
打赏 0
Samson

优化器判断,比较合适会走index intersect merge

暂无图片 评论
暂无图片 有用 0
打赏 0
chengang

首先 create_date 与 update_date 谁的区分度更好。
谁的区分度更好就决定了,这两个字段哪个排在前面。

然后再看state与type 这两个区分度好不好。如果也有较好的区分度,那就再往前放。如果区分度差,就往后放。

假定两种情况
1、create_date区分度比update_date好,且state与type区分度很差
即建立(create_date,update_date,state,type)
这样一个索引,这个索引会完成索引覆盖。不需要回表。能利用create_date一个字段做seek,其它字段做ICP
2、update_date比create_date区分度好, state字段区分度也不错。type区分度差。
即建立(state,update_date,create_date,type)这样一个索引
这个索引能利用state与update_date两个字段来做seek,也能完成索引覆盖

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
MySQL配置文件加载顺序?
回答 5
已采纳
一、Windows环境下配置文件读取顺序1、%WINDIR%\my.ini,%WINDIR%\my.cnf全局配置2、C:\my.ini,C:\my.cnf全局配置3、BASEDIR\my.ini,B
Mysql5.6锁表myisam
回答 2
已采纳
等待repair完成,或者尝试重启mysql服务
想在centos里安装mysql8 安装文件, 放到centos里哪个目录好?
回答 9
一个mysql安装目录搞这么费劲
在windows 安装mysql 8.0 ,数据文件放在nfs挂载盘下,服务就无法启动。这是什么原因?
回答 1
权限问题?
mysql 5.7 视图支持谓词推入吗?
回答 1
已采纳
没有
Mysql 的存储引擎,myisam和innodb的区别
回答 1
已采纳
Mysql的存储引擎,myisam和innodb的区别MySQL的存储引擎有三种:MyISAM、InnoDB和Memory。其中,MyISAM是MySQL的默认存储引擎,而InnoDB是MySQL的另
如何使用 NVL 子句连接多个 Select 语句?
回答 1
问题表述不清,我猜测你想要的查询结果是通过ITEMID关联这3个数据,得到ITEMID,ITEMNAME,“LastTransDate”,ONHANDQTY这4列值,而且这几个数据的行数是不一致的,即
MYBINLOG 工具可以挖掘出 纯文本的SQL吗?
回答 1
已采纳
mysqlbinlog可以的,如果是行模式,要mysqlbinlognodefaultsmysqlbin.000001base64outputDECODEROWSv
MySQL 只单主写,什么配置的服务器大概什么样的负载量?
回答 1
MySQL只单主写,什么配置的服务器大概什么样的负MySQL只单主写,服务器的负载量取决于多个因素,例如硬件配置、数据库表的设计和数据量等。一般来说,如果服务器的硬件配置较低,那么它的负载量也会相应较
excel中某个字段是空的,然后我导入mysql的时候,为什么是变成了'',而不是变成null,是编码问题吗?
回答 1
不是