使用前缀索引对MySQL优化的方法
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,下文给大家带来有关使用前缀索引对MySQL优化的方法内容,相信大家一定看过类似使用前缀索引对MySQL优化的方法的文章。我们给大家带来的有何不同呢?一起来看看正文部分吧,相信看完你一定会有所收获。1.
千家信息网最后更新 2025年11月07日使用前缀索引对MySQL优化的方法
下文给大家带来有关使用前缀索引对MySQL优化的方法内容,相信大家一定看过类似使用前缀索引对MySQL优化的方法的文章。我们给大家带来的有何不同呢?一起来看看正文部分吧,相信看完你一定会有所收获。
1.查看表结构(root@localhost) [prod_db]> show create table t_file_info\G;*************************** 1. row *************************** Table: t_file_infoCreate Table: CREATE TABLE `t_file_info` ( `id` varchar(36) NOT NULL DEFAULT '', `devid` varchar(64) DEFAULT NULL, `areaid` int(11) DEFAULT NULL, `fileid` varchar(256) NOT NULL, `filename` varchar(256) DEFAULT NULL, `filesize` int(11) DEFAULT NULL, `filemd5` varchar(40) DEFAULT NULL, `extend` varchar(4000) DEFAULT NULL, `status` int(11) NOT NULL DEFAULT '0', `createdate` datetime DEFAULT NULL, `fileurl` varchar(256) DEFAULT NULL, `businessid` bigint(20) NOT NULL DEFAULT '0', PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8
2.fileid是我们查询的一个条件,正常是需要创建索引的。
select char_length('63f2a078018649ca9948f5469550bf2a/group1/M00/00/DA/wKgj2FcMquGAVuJcAAAI4FL7ZCA388.jpg') ;+-----------------------------------------------------------------------------------------------------+| char_length('63f2a078018649ca9948f5469550bf2a/group1/M00/00/DA/wKgj2FcMquGAVuJcAAAI4FL7ZCA388.jpg') |+-----------------------------------------------------------------------------------------------------+| 84 |+-----------------------------------------------------------------------------------------------------+1 row in set (0.00 sec)--经过和开发沟通了解,前32位相当于uuid可以确定唯一值。3.这样的字段,我们怎么创建索引,是不是有规律可循。继续查看
--查看选择率select count(distinct(fileid))/count(*) AS Selectivity from t_file_info;select count(distinct left(fileid,32))/count(*) from t_file_info;(root@localhost) [prod_db]> select count(distinct(fileid))/count(*) from t_file_info;+----------------------------------+| count(distinct(fileid))/count(*) |+----------------------------------+| 1.0000 |+----------------------------------+1 row in set (0.17 sec)(root@localhost) [prod_db]> select count(distinct left(fileid,32))/count(*) from t_file_info;+------------------------------------------+| count(distinct left(fileid,32))/count(*) |+------------------------------------------+| 0.9999 |+------------------------------------------+1和0.9999几乎可以等同,其实这里因为点特殊情况,正常应该都是1才对的。
4.查看无索引的执行计划
explain select id,fileid from prod_db.t_file_info where fileid='63f2a078018649ca9948f5469550bf2a/group1/M00/00/DA/wKgj2FcMquGAVuJcAAAI4FL7ZCA388.jpg';(root@localhost) [prod_db]> explain select id,fileid from prod_db.t_file_info where fileid='63f2a078018649ca9948f5469550bf2a/group1/M00/00/DA/wKgj2FcMquGAVuJcAAAI4FL7ZCA388.jpg';+----+-------------+-------------+------+---------------+------+---------+------+-------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-------------+------+---------------+------+---------+------+-------+-------------+| 1 | SIMPLE | t_file_info | ALL | NULL | NULL | NULL | NULL | 35109 | Using where |+----+-------------+-------------+------+---------------+------+---------+------+-------+-------------+1 row in set (0.00 sec)
5.创建前缀索引,查看执行计划
alter table `prod_db`.`t_file_info` add index idx_t_file_info_fileid(fileid(32));(root@localhost) [prod_db]> explain select id,fileid from prod_db.t_file_info where fileid='63f2a078018649ca9948f5469550bf2a/group1/M00/00/DA/wKgj2FcMquGAVuJcAAAI4FL7ZCA388.jpg';+----+-------------+-------------+------+------------------------+------------------------+---------+-------+------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-------------+------+------------------------+------------------------+---------+-------+------+-------------+| 1 | SIMPLE | t_file_info | ref | idx_t_file_info_fileid | idx_t_file_info_fileid | 98 | const | 1 | Using where |+----+-------------+-------------+------+--返回1行才是我们想看到的
6.创建索引
(root@localhost) [prod_db]> alter table `prod_db`.`t_file_info` add index idx_t_file_info_fileid(fileid(32));Query OK, 0 rows affected (5 min 36.03 sec)Records: 0 Duplicates: 0 Warnings: 0创建索引观察系统资源使用情况,内存机会没有变化,但是CPU单核几乎跑满(root@localhost) [prod_db]> select count(fileid) from t_file_info;+---------------+| count(fileid) |+---------------+| 12299419 |+---------------+1 row in set (14.94 sec) --千万行
小结:
1.了解前缀索引的实用场景。
2.要和开发沟通,了解业务,才能创建最合适的索引。
3.创建索引对系统性能会有很大的影响,要选择一个合适的时间点去创建,评估好影响。任何事情不要想当然,当你没经验,还想当然的时候很容易出问题。
对于上文关于使用前缀索引对MySQL优化的方法,大家觉得是自己想要的吗?如果想要了解更多相关,可以继续关注我们的行业资讯板块。
索引
前缀
方法
合适
想当然
情况
系统
开发
影响
选择
不同
实用
很大
特殊
上文
下文
业务
内存
内容
场景
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
上海悦奕网络技术有限公司
儿童网络安全游戏道具
access同步数据库
如何做好网络安全保护
程序查询慢数据库快
金三系统是数据库
分布式列式数据库
服务器远程登陆黑屏怎么解决
一个数据库的表只能有一个主键吗
根据服务器ip地址找地址
网络安全 网络文明
geem2数据库修改
互联网科技最新估价
中控考勤机数据库结构
汉滨区腾乐软件开发有限公司
第17课初识数据库
战地2042收藏服务器
服务器端口被占怎么办
襄阳市网络安全等级保护政策
影响网络安全的因数不包括
kali网络安全百度网盘
linux服务器配置监听
软件开发文档 天气预报
服务器带宽是什么决定的
ecmall 连接数据库
网吧挖矿软件开发
浙江特色软件开发概念设计
软件开发团队晨会开场白
计算机网络安全编程知识点
威科先行数据库优缺点