当前位置: 首页 > news >正文

db-mysql

数据结构

  • 二叉树:左小右大

  • 红黑树:又名二叉平衡树

  • HASH: = in 不支持范围查找

  • BTREE:

  • B+TREE(BTREE变种,mysql使用数据结构):非叶子节点不存储数据

MYSQL 存储引擎

myisam:不支持事务

innodb(索引与数据存储在一个文件)

索引依赖于B+TREE的有序递增原理

mysql优化108军规

索引

索引结构

innodb支持类型:BTREE数据结构和FullText。默认创建类型为BTREE

索引分类

  • 聚集索引:只能 有一个,通常为主键。聚集索引叶子节点保存的是行数据
  • 二级索引:可以有多个,二级索引叶子节点保存的是聚集索引的值。二级索引使用回表查询方式查询数据

所需字段如果通过二级索引都可以获取到,那么不会回表查询

索引类型

主键索引

只能有一个

唯一索引

可以有多个,字段值不可重复

普通索引
联合索引

最左前缀原则:必须存在,与放在where后顺序无关

使用大于小于条件范围查询时,右侧的查询条件索引失效。大于等于或小于等于不会失效

前缀索引

场景:索引字段为字符串,且长度会很长时。

覆盖索引

需要返回的列,在索引中全部可以找到。

即联合索引包含所有select 后需要查询的列.避免回表查询提升效率

索引失效

  • 索引列字段函数运算
  • 索引列字段字符串不加单引号
  • 索引列字段like查询,%放到值前
  • or分割的条件,一侧有索引一侧无索引,会失效。
  • 走索引效率不如全表扫描,比如id>=1,id最小值为1,或索引列字段均为null,is not null走索引,is null不走索引,反之亦然

sql提示

一个字段建立了联合索引也建立了其他索引,默认使用联合索引。可以通过sql提示进行索引选择.

  1. use index_name
  2. ignore index_name

索引设计原则

  1. 查询量大,且查询频繁
  2. 常作为查询条件,排序,分组操作的字段建立索引
  3. 尽量选择区分度高,尽量建立唯一索引,区分度越高,使用索引的效率越高
  4. 如果字符串类型字段,字段长度较长,可以针对字段特点,建立前缀索引
  5. 尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间,避免回表,提高查询效率
  6. 控制索引数量,并不是越多越好,索引越多,维护索引结构的代价越大,会影响增删改的效率
  7. 如果索引列不能存储null值,请在创建表时使用NOT NULL 约束它,当优化器知道每列是否包含NULL值时,他可以更好地确定哪个索引最有效的由于查询

sql性能分析

查询数据库不同类型sql执行频次

show global status like ‘com_______’

查询慢查询日志是否开启

是否开启:show variables like ‘slow_query_log’

修改配置文件开启慢查询日志

#开启慢查询日志

show_query_log = 1

#默认10秒,修改为两秒

long_query_time = 2

profile详情查看sql耗时情况

查看是否支持:select @@have_profiling;

查看是否开启:select @@profiling;

设置开启: set profiling = 1;

查看当前会话中所有sql耗时情况:show profiles;

查看sql耗时具体体现位置:show profile for query query_id;

explain执行计划

  • id: id相同,执行顺序从上到下。id值不同,越大越先执行

  • *type: 连接类型。性能由好到差:null,system,const,eq_ref,ref,range,index,all(不查询表类型为null,根据主键、唯一索引为const。根据非唯一索引为ref)。

  • *possible_key: 显示可能用到的索引,有多个会展示多个

  • *key:实际用到的索引

  • *key-len:长度越短越好。索引的长度,显示的为索引字段可能的最大长度。

  • rows:执行查询的行数,innodb中是预估值,仅供参考

  • filterd:越大越好。返回结果行数占所需读取行数的百分比

sql优化

insert优化

大于500w使用load加载文件

<insert id="insertBatchByLoadData"> LOAD DATA LOCAL INFILE #{path,jdbcType=VARCHAR} INTO TABLE 表名 CHARACTER SET utf8 -- 以什么字符作为分隔符 FIELDS TERMINATED BY '||' -- 每条记录的分隔符默认为’\n’即为换行符 LINES TERMINATED BY '\n' ( 字段, 字段, ... ) </insert>

主键优化

规范:主键长度尽量短,顺序插入

推荐使用自增主键,长度短,有序

order by 优化

排序可能出现两种情况

using index:效率高。直接通过索引返回数据。有升序有降序的时候可以创建索引时指定排序方式

using filesort:需要将查询返回的结果在排序缓冲区排序,大批量量还可能用到磁盘文件

groupby优化

建立索引,多字段分组注意最左前缀原则

limit优化

覆盖索引+子查询查询id后作为关联表,关联查询后分页

count优化

  1. COUNT主键:innodb引擎遍历每张表,每一行主键取出,返回给服务层,服务层拿到主键,直接按行进行累加
  2. COUNT字段:innodb引擎遍历整张表把每一行的字段值取出,返回给服务层。没有notnull约束,服务层判断是否为null,不为null计数累加。有notnull约束,直接按行累加
  3. COUNT(1/其他数字):innodb引擎遍历整张表,不取值,服务层对于返回的每一行,放1/其他数字进去直接进行累加
  4. COUNT(*):innodb引擎不会把全部字段取出来,而是专门做了优化,不取值,服务层直接按行进行累加。

效率排序:*≈数字>主键>字段

update优化

根据索引字段修改,不根据索引会行锁升级为表锁

http://www.jsqmd.com/news/720390/

相关文章:

  • PHP 8.9大文件处理性能跃迁实录(87%内存降低+4.2倍吞吐提升):Fiber协程+Chunked Transfer全链路解析
  • 2026最新串串香品牌推荐!国内优质权威榜单发布,成都福建四川等地品牌口碑出色 - 十大品牌榜
  • 别再死记硬背DTC码了!手把手教你用Python解析故障码(B100016, U007304为例)
  • 北京家教市场乱象调查:从“开盲盒”到“价格刺客”,北师大家教中心已走出一条规范化之路 - 教育资讯板
  • 教育培训行业做 GEO 该找哪家?2026 年知识类场景 AI 搜索引擎优化平台深度评测 - 速递信息
  • 数字文博展馆设计公司全国实力测评:成都汉诺会展实力登榜 - 速递信息
  • 猫抓Cat-Catch:从资源被动获取到数字主权掌控的认知突破
  • 2026年北京专业消杀公司深度横评|臻洁虫控与行业领军品牌对标指南 - 企业名录优选推荐
  • 2026最新麻辣烫厂家推荐!国内优质权威榜单发布,成都福建四川等地品牌口碑出众 - 十大品牌榜
  • 基于Matlab的FFT频谱分析与数字滤波器功能:谐波提取、自定义频段清除及无相位滞后滤波处理...
  • 避坑指南:Jetson Nano串口/dev/ttyTHS1权限设置与STM32通信稳定性实战
  • 当游戏帧率卡顿成为日常:一个智能管家如何让DLSS管理变得像呼吸一样自然
  • 终极跨平台指南:使用ProperTree轻松编辑和管理plist配置文件
  • STM32 ADC实战避坑指南:从电位器到OLED,手把手教你搭建多通道电压监测系统
  • 国内旋盖机厂家实力排行:5家主流品牌实测对比 - 奔跑123
  • 2026承接科研动物实验的公司服务与选择指南 - 品牌排行榜
  • 2026物联网照明厂家口碑推荐及行业技术发展观察 - 品牌排行榜
  • 交接班信息传递遗漏,生产问题责任无法追溯怎么办?2026数字化追溯与AI智能体落地实战
  • 凡得洞察 | 三个月 vs 三年:一家啤酒巨头的供应链改造给了我们什么启示?
  • 告别代码!Lang-SAM的Web UI玩法:上传图片输入文字就能精准抠图
  • 快招品牌鉴别逻辑拆解:见荨合规运营资质验证 - 奔跑123
  • 阴阳师自动化脚本终极指南:告别枯燥日常,一键解放双手
  • 2026物联网照明定制厂家:智能调光与节能技术新趋势 - 品牌排行榜
  • 量子谐振子在超导量子计算中的应用与实践
  • 2026年3月玻璃绝缘子公司推荐,复合绝缘子/玻璃绝缘子/改悬式绝缘子,玻璃绝缘子供应商哪个好 - 品牌推荐师
  • 知网底层逻辑易帜:哪些降重软件可以同时降低查重率和AIGC疑似率? - nut-king
  • 首件检验流程繁琐,耗时久还容易出现合规漏洞怎么办?——基于实在Agent的AI+超自动化全流程闭环实战
  • 2026最新辣椒面生产厂家/企业推荐!国内优质权威榜单发布,口碑靠谱成都福建四川等地企业精选 - 十大品牌榜
  • 为什么降AI处理后还需要重新检查查重率:降AI和查重关系深度解读
  • 如何用GetQzonehistory完整备份你的QQ空间历史记忆:终极免费指南