MySQL count(*)之索引选择
发表于:2025-11-19 作者:千家信息网编辑
千家信息网最后更新 2025年11月19日,覆盖索引对于一些统计问题,如下:MySQL > show create table test1 \G*************************** 1. row ***************
千家信息网最后更新 2025年11月19日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安全错误
数据库的锁怎样保障安全
列数据库种类
软件开发logo图片加含义
网络安全保密教育知识
公安队伍加强网络安全简报
绿园区质量网络技术参考价格
诛仙网通区哪个服务器好
校园网络安全相关制度
实施网络安全的原因
注册万方数据库如何撤销
夏立军网络安全股票
软件开发拟解决的关键问题
戴尔硬件服务器系统盘在哪
服务器hd7670显卡
浙江农信软件开发可以吗
虚拟主机上的数据库怎么用
无锡智能软件开发管理
安徽工业软件开发哪家实惠
足球经理球员数据库
武汉应届生软件开发工资
sql同时连接两个数据库
运营软件开发方案
杭州仁江网络技术
网络技术发展心得体会
抗战视频软件开发
服务器销售怎么说话
电信网络安全应对策略解析
安徽工业软件开发哪家实惠
上海华为服务器续保费用
网络安全密钥校园网
电力载波网络安全