MySQL count(*)之索引选择
发表于:2025-02-11 作者:千家信息网编辑
千家信息网最后更新 2025年02月11日,覆盖索引对于一些统计问题,如下:MySQL > show create table test1 \G*************************** 1. row ***************
千家信息网最后更新 2025年02月11日MySQL count(*)之索引选择
覆盖索引对于一些统计问题,如下:
MySQL > show create table test1 \G*************************** 1. row *************************** Table: test1Create Table: CREATE TABLE `test1` ( `id` bigint(16) NOT NULL AUTO_INCREMENT, `order_seq` bigint(16) NOT NULL, PRIMARY KEY (`id`), KEY `idx_id` (`id`), KEY `idx_id_ordseq` (`id`,`order_seq`)) ENGINE=InnoDB AUTO_INCREMENT=15002212 DEFAULT CHARSET=utf8mb41 row in set (0.00 sec)MySQL > explain select count(*) from test1 where id>10000 and id<20000;+----+-------------+-------+------------+-------+------------------------------+--------+---------+------+------+----------+--------------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+-------+------------------------------+--------+---------+------+------+----------+--------------------------+| 1 | SIMPLE | test1 | NULL | range | PRIMARY,idx_id,idx_id_ordseq | idx_id | 8 | NULL | 9999 | 100.00 | Using where; Using index |+----+-------------+-------+------------+-------+------------------------------+--------+---------+------+------+----------+--------------------------+1 row in set, 1 warning (0.00 sec)
innodb存储引擎选择了id字段的辅助索引,而不是聚集索引来统计,更不是联合索引。原因是辅助索引远小于聚集索引,选择辅助索引可以减少IO资源消耗。
而另外一个统计场景:
select count(*) from test1 where order_seq > 1502131212577 and order_seq< 202007080947244761;
test1表建有id和 order_seq 字段的联合索引。
MySQL > show create table test1 \G*************************** 1. row *************************** Table: test1Create Table: CREATE TABLE `test1` ( `id` bigint(16) NOT NULL AUTO_INCREMENT, `order_seq` bigint(16) NOT NULL, PRIMARY KEY (`id`), KEY `idx_id` (`id`), KEY `idx_id_ordseq` (`id`,`order_seq`)) ENGINE=InnoDB AUTO_INCREMENT=15002212 DEFAULT CHARSET=utf8mb41 row in set (0.00 sec)MySQL > explain select count(*) from test1 where order_seq > 1502131212577 and order_seq< 202007080947244761;+----+-------------+-------+------------+-------+---------------+---------------+---------+------+----------+----------+--------------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+-------+---------------+---------------+---------+------+----------+----------+--------------------------+| 1 | SIMPLE | test1 | NULL | index | NULL | idx_id_ordseq | 16 | NULL | 15068082 | 11.11 | Using where; Using index |+----+-------------+-------+------------+-------+---------------+---------------+---------+------+----------+----------+--------------------------+1 row in set, 1 warning (0.00 sec)
这里使用条件 order_seq 查询,一般情况下使用不了联合索引的,但是这个案例中的查询,利用到覆盖索引的信息。possible_keys依然为null,但是key是idx_id_ordseq,extra里出现Using index,表示为覆盖索引。
索引
统计
联合
辅助
选择
字段
查询
信息
原因
场景
引擎
情况
条件
案例
资源
问题
存储
消耗
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全密匙和wifi密码
红警是用什么软件开发的
网络安全攻防平台
软件开发部在培训中的职责
内蒙古服务器机柜定做
为什么不想做软件开发
淘宝店铺 软件开发
齐齐哈尔租房网络安全
河南上位机软件开发
服务器租用哪个靠谱
苹果id老是提示连接不到服务器
服务器cpu温度不一样
sdk可以用什么软件开发
整机销售软件开发公司
hph软件开发
管理控制台 服务器
网络安全中的安全设备
众元网络安全吗
网络安全事件分哪几种形式
计算机网络技术及应用难吗
网络安全的英语作文4级
java 数据库 树
信息软件开发瀑布模型
vfm数据库
烟台昊月互联网科技有限公司
关于网络安全的知识报告
硬件设计算法研究软件开发
东安租房软件开发
软件开发环境构建步骤
山东数据库代码生成器使用