打开APP
未登录
开通VIP,畅享免费电子书等14项超值服
开通VIP
首页
好书
留言交流
下载APP
联系客服
MYSQL数据库优化(一)
行者花雕
>《待分类》
2022.03.25
关注
内存的读写速度远大于磁盘的读写速度,减少磁盘读写,可以作为重点优化方向。
数据库内部最重要的就是存储结构,存储结构必然涉及到数据结构知识。比如用到了常用的哈希图、树。
MYSQL数据库常用两种引擎,InnoDB、MyISAM,可以直接对表指定数据库引擎。
MYSQL索引是一种数据结构,帮助更快的查询数据。索引使用的是B+树(
B树改进版,一个节点可以包含多个值,深度可控,IO读写次数少,三层可以保存数千万个值
)。叶子节点存值,其余节点存索引值。除此之外,一个节点可以存放多个连续地址的数据,可以符合访问局部性原理,直接从缓存取数据,速度非常快,减少磁盘IO。数据结构可视化工具:
https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html
MYSQL生成的表和数据会保存在mysql/data目录下,并以表名生成对应的目录。FRM文件是表设计文件。
InnoDB引擎,会在mysql/data/表目录下生成IBD文件。IBD文件包含索引和数据,索引是聚集型索引。
MyISAM引擎,会在mysql/data/表目录下生成MYI和MYD文件,MYI是索引文件,记录存储地址,MYD是数据文件。索引是非聚集型索引。不支持事务。
使用索引注意事项:
1>.不要在DML频繁的表上加索引(一百万条数据维护B+树耗性能)。 2>.不要在数据较少的表上加索引。3>.尽量不要在索引列上加函数计算。 4>.不要select *查询,索引会失效。5>.在查询比较频繁的表上加索引。6>.在离散量比较大的字段加索引(计算方法:count(distinct col):count(col)越大越好,如uuid,外键ID等)
。
尽量使用int自增作为主键,因为这样符合数组的特性,数组查询效率较高(
访问局部性原理,数组内存地址连续,读取一个扇区的数据放入二级缓存即可,速度更快,不用反复查询内存
)。
InnoDB引擎创建的表,可以不设置主键。但是本身不能没有主键,当不设主键的时候,会在表中找到非NULL并且设置为索引的字段作为主键,如果找不到这样的字段,就用_rowid作为主键,这样会导致查询效率变差。
1>全表扫描性能差。2>_rowid实现源自于全局的序列,这样高并发插入数据共享此序列,MYSQL保证数据安全,会加上锁。这必然导致性能降低
。
InnoDB引擎主键索引查询时,会根据索引值直接在叶子节点拿到值。其他如字段索引,会生成个B+树,叶子节点保存本身索引值和主键值,再根据主键值回到主键索引B+树中获取真正的值(回表查询)。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报
。
打开APP,阅读全文并永久保存
查看更多类似文章
猜你喜欢
类似文章
【热】
打开小程序,算一算2024你的财运
性能调优-MySQL索引数据结构详解与索引优化
数据库索引详解
对MySQL索引的认识
MySQL数据库 InnoDB引擎的索引原理概述与设计索引调优简述
盘点那些被问烂了的 Mysql 面试题 | Laravel China 社区
Java数据库之索引
更多类似文章 >>
生活服务
热点新闻
留言交流
回顶部
联系我们
分享
收藏
点击这里,查看已保存的文章
导长图
关注
一键复制
下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!
联系客服
微信登录中...
请勿关闭此页面
先别划走!
送你5元优惠券,购买VIP限时立减!
5
元
优惠券
优惠券还有
10:00
过期
马上使用
×