最新要闻
- 男子当着7岁女孩面刺56刀杀死前女友:已执行死刑,一审时曾被判死缓
- 当前讯息:七彩虹五大RTX 4070开卖:水神/火神5699元!神秘新卡加量不加价
- 号称“不泄密” 微信键盘Windows版上线:不支持Win7
- 4799元的RTX 4070显卡上市 厂商不急于增产:库存还没完 不想降价
- 碎片化一地鸡毛!安卓14推送:安卓13用户量仍少的可怜
- 全球动态:微信功能异常大量用户中招!工信部指导腾讯:重要业务安全稳定
- 世界观速讯丨美原油交易策略:油价受阻于200日均线,关注IEA月报
- AITO问界M5智驾版将亮相上海国际车展 余承东:双天花板级体验
- 世界看热讯:中国药卖给美国人有多难
- 12元在家看国产科幻大片!《流浪地球2》全网上线:爱优腾会员不免费
- 当前通讯!7年了!AMD CUDA杀手ROCm终于登陆Windows、支持游戏显卡
- 俄罗斯发力自主OS系统 无奈碎片化:Linux就有19种
- 无极县政府网 无极县政府
- 速读:全国性能最强!腾讯发布高性能算力集群:专为AI大模型训练准备
- 10碟充氦!希捷首款22TB机械硬盘发布:价格给力
- 水花消失术再现!全红婵、陈芋汐夺得2023跳水世界杯首金
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
MySQL学习笔记-索引
索引
索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
(资料图片仅供参考)
无索引的查找:全表扫描(将整张表遍历一遍),性能极低。
有索引的查找:数据库系统在存储数据的同时会维护一种数据结构(如二叉树),当需要查找时,利用该数据结构进行查找,性能较高。
索引的优缺点
一. 索引结构
MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的结构。
- 索引在存储引擎中的支持情况
- 平常所说的索引,如果没有特别指明,一般都是说B+树结构组织的索引。
1. B+树
1.1 二叉树
一种经典的数据结构。
二叉树的两个缺点:
- 顺序存储二叉树时,会形成一条链表,二叉树的深度很大,效率很低。
- 二叉树的度不大于2,在数据库中存有大量数据的时候深度很大,效率很低。
1.2 红黑树
一种自平衡的特殊二叉树。
可以解决二叉树可能形成链表的缺点,但是依旧存在数据量大时深度很大的问题。
1.3 B树(平衡多路查找树)
- 一种自平衡的树。可以解决二叉树的两个缺点。
- 一个节点可以拥有两个以上的子节点。
1.4 B+树
- B树的变种。
- B+树与B树的区别:
- 所有的元素都会出现在叶子节点。
- 叶子节点形成了一条单向链表。
1.5 MySQL中的B+树
- 在MySQL中,对B+树进行了优化。在原有基础上,叶子节点改为了双向循环链表,提高区间访问的性能。
2. Hash
哈希索引就是采用一定的Hash算法,将键值换算成新的Hash值,映射到对应的槽位上,然后存储在Hash表中。
如果两个(或多个)键值映射到同一个槽位上,产生了Hash冲突,可以通过链表解决。
2.1 Hash索引的特点
- 只能用于对等比较(=,in),不支持范围查询(between,>,<,...)。
- 无法利用索引完成排序操作。
- 查询效率高,通常只需要一次检索(不出现hash冲突),效率高于B+树。
2.2 存储引擎支持
在MySQL中,支持hash索引的是Memory引擎,而InnoDB中具有自适应hash功能,hash索引是存储引擎根据B+树索引在指定条件下自动构建的。
二. 索引分类
- 在InnoDB存储引擎中,根据索引的存储形式,又可以分为以下两种:
- 聚集索引的选取规则:
- 如果存在主键,主键索引就是聚集索引。
- 如果不存在主键,将适用第一个唯一(UNIQUE)索引作为聚集索引。
- 如果不存在主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引。
- 聚集索引和二级索引的示意图:
- 在查找时,先走二级索引,找到对应的主键后,再走聚集索引,找到对应的整个行。(回表查询)
三. 索引语法
1. 创建索引
create [unique|fulltext] index {索引名} on {表名} ({字段名},...);
- unique唯一索引 |fulltext全文索引 |不加这两个则说明是常规索引。
- 一个索引可以关联多个字段,如果一个索引只关联一个字段,叫单列索引,如果关联多个字段,叫联合索引(组合索引)。
- 联合索引的字段顺序是有讲究的。
- 索引名一般的命名规则:idx _ 表名 _ 字段名
2. 查看索引
show index form {表名};
3. 删除索引
drop index {索引名} on {表名};
四. SQL性能分析
做性能分析是为了做SQL优化,SQL主要是做查询优化,因为查询操作比增删改多,查询优化的关键在于索引。
1. SQL执行频率
# 查看当前数据库的增删改查的访问频次show global status like "Com_______";# 模糊匹配"Com"后面是7个下划线
- 根据执行频率来判断SQL优化需要在哪方面进行,也就是说这个数据库哪个操作频率高就优化哪个操作。
2. 慢查询日志
慢查询日志记录了所有执行时间超过制定参数 (long_query_time,单位:秒,默认10秒) 的所有sql语句的日志
慢查询日志用于找到执行慢的sql语句,进行针对性优化。
2.1 开启慢查询日志
MySQL的慢查询日志默认没有开启,需要在MySQL的配置文件(/etc/my.cnf) 中配置。
- 查询是否开启
show variables like "slow_query_log";
- 开启慢查询日志
在MySQL的配置文件(/etc/my.cnf) 中配置如下信息:
# 开启MySQL慢查询日志开关show_query_log = 1# 设置慢查询日志的时间为2秒,SQL语句执行时间超过2秒就会被记录long_query_time = 2
配置完毕后,需要重启服务器。
# 重启服务器systemctl restart mysqld
2.2 查看慢查询日志
# 慢查询日志存放地址 Linux下/var/lib/mysql/localhost-slow.log
3. profile详情
Show profiles 能够在做SQL优化时帮助我们了解时间都耗费到哪里去了。
3.1 查看MySQL是否支持profile操作
select @@have_profiling;
3.2 打开profile开关
# 查看是否打开select @@profiling;# 打开profile开关set [session|global] profiling = 1;
profile默认是关闭的。
[session|global] 可以指定是会话级别的还是全局的。
3.3 查看profile详情
# 查看每一条SQL的耗时基本情况show profiles;# 查看指定query_id的SQL语句各个阶段的耗时情况show profile for query query_id;# 查看指定query_id的SQL语句CPU的使用情况show profile cup for query query_id;
- query_id指的是在profiles中的某一条指令的id,可以在show profiles中看到。
4. explain执行计划
explain 或者 desc命令获取MySQL如何执行select语句的信息,包括在select语句执行过程中表如何连接和连接的顺序。
# 直接在select语句之前加上关键字explain/descexplain select {字段列表} from {表名} where {条件};
- explain执行计划各字段含义
五. 索引使用
1. 最左前缀法则
如果索引了多列(联合索引),要遵循最左前缀法则。最左前缀法则是指查询从索引的最左列开始,并且不跳过索引中的列。
如果跳跃某一列,索引将部分失效(后面的字段索引失效)。
查询时左边字段存在即符合最左前缀法则,不管它在代码中的位置。
2. 范围查询
- 联合索引中,出现范围查询(> , <),范围查询右侧的列索引失效。
- 用(>= , <=)不会出现失效情况。
3. 索引列运算
- 不要在索引列上进行运算操作,否则索引将失效。
4. 字符串不加引号
- 字符串类型字段使用时,不加引号,索引将失效。
5. 模糊查询
- 如果是尾部进行模糊查询,索引不会失效;如果是头部进行模糊查询,索引会失效。
6. or连接的条件
- 用or分割开的条件,如果or前的条件中的列有索引,二后面的列没有索引,那么涉及的索引都不会被用到。
- 只要把没有索引的建立一个索引就可以解决失效问题。
7. 数据分布影响
- 如果MySQL评估使用索引比全表更慢,则不使用索引。
8. SQL提示
SQL提示是优化数据库的一个重要手段。在SQL语句中加入一些人为的提示来达到优化操作的目的。
8.1 use index
- 使用指定索引(建议)
select * from {表名} use index({索引名}) where...;
8.2 ignore index
- 不使用某个索引
select * from {表名} ignore index({索引名}) where...;
8.3 force index
- 使用指定索引(必须)
select * from {表名} force index({索引名}) where...;
9. 覆盖索引
尽量使用覆盖索引(查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到),减少使用select *。
使用覆盖索引和没有使用覆盖索引,在explain中的Extra列有不一样的提示:
- (没使用)using index condition : 查找使用了索引,但是需要回表查询数据。
- (使用了)using where; using index : 查找使用了索引,但是需要的数据都在索引列中能够找到,所以不需要回表查询数据。
覆盖索引直接在二级索引中获取了返回所需的所有数据,所以不需要回表查询,查询速度快。
如果不是覆盖查询,在二级索引中查询到数据后,还需要拿到对应数据的主键,到聚焦索引中查询行数据,这就叫回表查询,所以速度慢。
10. 前缀索引
当字段类型为字符串时,有时候需要存储很长的字符串,如果建立索引,索引会变得很大,浪费大量磁盘IO,影响查询效率。
此时可以只用字符串的一部分前缀来建立索引(前缀索引),可以大大节约索引空间,从而提高效率。
10.1 创建前缀索引
create index {索引名} on {表名}({字段名}({前缀的字符数}));
10.2 前缀长度的选择
可以根据索引的选择性来决定。
选择性:不重复的索引值和数据表的记录总数的比值。索引选择性越高,效率越高。唯一索引的选择性是1,是性能最好的。
求选择性:
select count(distinct substring({字段名},1,{截取长度}))/count(*) from {表名};
11. 单列索引和联合索引
单列索引:一个索引只包含单个列
联合索引:一个索引包含了多个列
在业务场景中,如果存在多个查询条件,考虑针对查询字段建立索引时,建议使用联合索引。
联合索引的存储结构:
六. 索引设计原则
关键词:
MySQL学习笔记-索引
如何通过Java程序合并Word文档
观焦点:使用appuploader工具发布证书和描述性文件教程
Vue之 vue-router
记录-Vue.js模板编译过程揭秘:从模板字符串到渲染函数
男子当着7岁女孩面刺56刀杀死前女友:已执行死刑,一审时曾被判死缓
当前讯息:七彩虹五大RTX 4070开卖:水神/火神5699元!神秘新卡加量不加价
号称“不泄密” 微信键盘Windows版上线:不支持Win7
4799元的RTX 4070显卡上市 厂商不急于增产:库存还没完 不想降价
碎片化一地鸡毛!安卓14推送:安卓13用户量仍少的可怜
全球动态:微信功能异常大量用户中招!工信部指导腾讯:重要业务安全稳定
axiom——一款基于云的分布式网络安全扫描工具框架
低代码起势,程序员闷头开发的日子结束了
世界观速讯丨美原油交易策略:油价受阻于200日均线,关注IEA月报
焦点速看:恒生指数14日收涨0.46% 有色金属行业领涨
AITO问界M5智驾版将亮相上海国际车展 余承东:双天花板级体验
世界看热讯:中国药卖给美国人有多难
12元在家看国产科幻大片!《流浪地球2》全网上线:爱优腾会员不免费
当前通讯!7年了!AMD CUDA杀手ROCm终于登陆Windows、支持游戏显卡
俄罗斯发力自主OS系统 无奈碎片化:Linux就有19种
无极县政府网 无极县政府
实时焦点:用 Go 剑指 Offer 31. 栈的压入、弹出序列 (辅助栈)
企业内部培训网站为例,探索云上成本优化
世界新资讯:【财经分析】房企融资边际回暖 结构分化背景下择券仍需审慎
当前通讯!收评:沪指涨0.32%创年内收盘新高 半导体行业掀涨停潮
速读:全国性能最强!腾讯发布高性能算力集群:专为AI大模型训练准备
10碟充氦!希捷首款22TB机械硬盘发布:价格给力
水花消失术再现!全红婵、陈芋汐夺得2023跳水世界杯首金
天天消息!仅重126g!阿里云推出无影云电脑“魔方AS05”:7个全尺寸接口
每日视讯:2450CVIA刷新亮度天花板!当贝X5旗舰投影仪图赏
武磊谈补发2021中国金球奖:荣誉将激励我为中国足球做更多贡献
天天新动态:Huffman实现
即时:《安富莱嵌入式周报》第309期:开源脑机接口套件,三相多电平逆变器,开源电位仪,单片机并行计算,蓝牙市场分析报告,AI密码破解,nRF54H2发布,Z-W
全球微动态丨python 之 session鉴权的处理
【世界播资讯】git中 commit 和 pull 的先后顺序问题会产生多余的merge记录
全球微资讯!#POWERBI 度量值动态格式字符串,利用动态格式,实现百分数智能缩位(powerbi4月重磅更新功能)
高亮度+顶级芯 旗舰更进一步!当贝X5激光投影仪评测:2450CVIA带来震撼视觉体验
焦点速递!免费、不用注册、支持中文!ChatGPT最强竞品爆火:一手实测体验在此
快报:国产FPS《边境》发布之路坎坷:服务器出现紧急BUG
五一火车票明日开售:五一假期连休5天
世界新动态:徕卡味儿十足!小米13 Ultra摄影套装亮相:手机秒变相机
山东省高级人民法院电话簿(山东省高级人民法院电话)
当前报道:全面解析反欺诈(羊毛盾)API,助你识别各类欺诈风险
天天实时:T-SQL基础教程Day2
世界热文:DXO拍照得分全球第一!OPPO Find X6 Pro卖疯 销量同比增长129%
世界快资讯丨失业大军涌入外卖 骑手收入腰斩:拼了一天赚400 却被罚1000
上亿广场里排队20分钟等餐?为了这一幕,新市府已经等了三年
.NET7使用HttpClient实现查询天气预报接口
天天亮点!大二男生靠打工奖学金穷游37城:没问家里要过1分钱
焦点热门:准备好钱包 比亚迪百万豪车仰望U8四天后开售:超跑U9一同亮相
Redmi Note 12 Turbo首销过后还在狂卖!卢伟冰都没想到
变化极大的iOS 17要来了!苹果内测iOS 16.6系统:或为绝唱更新
今年五一档杀疯了 16部国产大片扎堆:好莱坞大片中国市场遇冷 不符合国人审美
世界看热讯:签约!年产45万吨,林州林钢将建亚洲单体最大铸管生产车间
世界时讯:SpringBoot 如何保证接口安全?老鸟们都是这么玩的
全面数字化时代,国有大型银行如何走好金融创新之路?
速讯:PHP 备忘清单_开发速查表分享
今日热议:如何快速开发软件?这篇文章说明白了
世界微速讯:2023年百大影响力人物:马斯克、TikTok周受资等入榜
公司回应员工未及时回复收到被辞退:顶撞领导 不服从管理
【全球时快讯】量旋科技进军超导量子计算!三大新品、软硬件全流程搞定
世界最资讯丨3年前老机型没被抛弃!一加8系列官宣适配ColorOS 13.1
男子机动车道上骑鸵鸟还拍视频炫耀:系养殖基地训练师、已被处理
世界百事通!16岁女孩骑摩托载21岁女伴不幸遇难,生前网友曾劝“危险”被怼
ntuser是什么文件?ntuser文件可以删除吗?
宏基笔记本电脑风扇设置在哪里?宏基笔记本电脑风扇声音大怎么解决?
摩托罗拉xt685什么时候上市的?摩托罗拉xt685手机参数
显卡金手指是什么?显卡金手指磨损有影响吗?
266.58显卡驱动没法识别硬件是怎么回事?266.58显卡驱动没法识别硬件怎么解决?
全球快报:更安全、更低耗的微服务架构改造之道
PDCA循环模型——如何用同样的时间做更多的事?【No.1 】
聚焦:山西焦化:公司2023年第一季度报告预约披露时间为2023年4月25日
世界关注:荣耀推“三叉戟” 赵明:笔记本过去30年没啥变化 需要跃迁
【全球新要闻】比理想L8 Air便宜3万多 魏牌蓝山四驱版值得买吗?一文看懂
240Hz高刷屏+RTX40显卡!微星星影15游戏图赏
【独家焦点】今年五一档“杀疯了” 至少16部影片扎堆上映:《长空之王》最受期待
黑白相机卖到71000元!徕卡M11 Monochrom正式发布
Espanso文本拓展软件使用体验
当前时讯:简单的了解下 Fetch API 的工作原理
详解 APISIX Lua 动态调试插件 inspect
四舍五入 - 逼疯全世界的开发者
全球热议:NTP网络校时服务器(北斗GPS校时器)在地铁内网系统中的应用
【新视野】半导体设备板块快速走高,金海通涨停
年内公募新基金发行突破2800亿元 债券型基金占比超六成
《Redfall》引发粉丝强烈不满
环球焦点!《名侦探柯南》新剧场版上映 柯哀亲了登顶热搜!新兰CP党表示要弃剧
上海车展全球首发 比亚迪B级纯电SUV官宣:命名“宋L”
焦点快看:女子团购住民宿 结果住到自己家的房子 网友:王思聪有这体验
【全球快播报】荣耀Magic5成旗舰标杆!赵明:从来没有友商敢挑战它的续航、屏幕
环球速看:中标 | 含塔筒3200-3438元/kW!海装、金风、电气风电预中标山东能源渤中海上风电项目
Spring Boot 接口加解密,新姿势来了!
全球微头条丨苹果iPhone 15 Pro机型再曝光:依然实体音量键 静音拨片改为Action按钮
苹果和安卓折腾了5年 愣是干不过微信小程序
抢先看!迪士尼更新真人版《小美人鱼》预告:黑小美人鱼海下展唯美瞬间
世界看热讯:标致408保价期内降价遭集体投诉 车主:4S店称地方补贴不算降价
【全球聚看点】现场办公面对面听意见解难题 西固区定制化服务助企纾困
天天微动态丨【读财报】消费主题基金年报透视:2022年净值普跌 全年共亏逾280亿
每日热门:清华、北大在校生五一淄博免费游”?官方回应:消息属实
快讯:巴奴“天价土豆”换名后重新上架:多地售价18元一份 北京上海22元
云南16岁女孩载21岁女孩无证驾驶摩托车身亡 生前网友曾劝危险