![](https://img-blog.csdnimg.cn/20210113203329344.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
MySQL高级
稍微深入地了解MySQL。
TandK
这个作者很懒,什么都没留下…
展开
-
讲一个索引失效应对措施的案例
建表SQLcreate table staffs( id int primary key auto_increment, name varchar(24) not null default'' comment'姓名', age int not null default 0 comment'年龄', pos varchar(20) not null defalut'' comment'职位', add_time timestamp not null dafault current_timestam原创 2021-01-20 18:08:43 · 98 阅读 · 0 评论 -
多表索引优化分析
双表图为两张表左连接用右表索引select * from class left join book on class.card=book.card;那么索引应该建在右表book的card字段。右连接用左表索引如果索引已然建立在class的card字段上,那么使用select * from book right join class on book.card=class.card;,查询效率会更高。上面两种情况结果是一样的,查询结果和explain结果都是。三表和两表一样,左连接用右表索引,原创 2021-01-19 19:21:48 · 195 阅读 · 0 评论 -
单表索引优化分析
我们拿一个例子来分析,这样一个表需求:查询category_id为1且comments大于1的情况下,views最多的article_id。SQL语句:select id,author_id from article where category_id=1 and comments>1 order by views desc limit1;要求分析出要做的索引。不做索引时,我们explain上面的SQL语句,情况是:可以看到问题在于type的值为ALL和Extra的值为Using fil原创 2021-01-17 14:49:51 · 105 阅读 · 0 评论 -
MySQL性能分析
MySQL常见性能瓶颈CPU:CPU的饱和一般发生在IO时IO:IO瓶颈发生在装入数据远大于内存容量时服务器硬件的性能瓶颈:top,free,iostat和vmstat来查看系统的性能状态Explain是什么(查看执行计划)使用EXPLAIN关键字可以模拟优化器执行sql查询语句,从而知道mysql是如何处理你的sql语句的。分析你的查询语句或是表结构的性能瓶颈。能干嘛查看表的读取顺序查看数据读取操作的操作类型查看哪些索引可以使用查看哪些索引可以被实际使用查看表之间的引用查看原创 2021-01-16 14:02:38 · 124 阅读 · 0 评论 -
mysql逻辑架构简介
连接层(图中最顶层Connectors)包括jdbc等驱动和c3p0、druid连接池。服务层(图中的MySQL Server)完成大多数的核心服务Management Services & Utilities:有安全、备份、复制、集群等等服务SQL Interface:识别SQL语句是读还是写Parser:将SQL语句转化成机器懂的语言Optimizer:SQL会将你写的语句 优化成自己觉得最佳的语句,相当于这个过程同一效果的SQL会执行两次,你的一次,他的一次。阿里将这...原创 2021-01-13 20:16:44 · 94 阅读 · 0 评论 -
MySQL存储引擎 -- MyISAM和InnoDB的区别
查看当前数据库使用的存储引擎的命令show engines;或show variables like '%storage_engine%';MyISAM和InnoDB的区别对比项MyISAMInnoDB主外键不支持支持事务不支持支持行表锁表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作行锁,操作是只锁一行,适合高并发操作缓存只缓存索引,不缓存真实数据不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性影响表空原创 2021-01-13 20:19:56 · 62 阅读 · 0 评论 -
性能下降sql慢(执行时间长、等待时间长)可能的原因
性能下降sql慢(执行时间长、等待时间长)可能的原因:查询语句写的烂索引失效关联查询太多join(设计缺陷或不得已的需求)服务器调优及各个参数设置(缓冲、线程数等)原创 2021-01-14 14:26:25 · 580 阅读 · 0 评论 -
常见通用的Join查询
sql执行顺序(以下示例,从上到下是有顺序的)咱们写的sql语句select distinct <select_list>from <left_table> <join_type>join <right_table> on <join_condition>where <where_condition>group by <group_by_list>having <having_conditio原创 2021-01-14 14:45:39 · 693 阅读 · 0 评论 -
索引简介
索引是什么官方定义:索引(Index)事帮助mysql高效获取数据的数据结构。你可以简单理解为“排好序的快速查找数据结构”(排序+查找)详解,如下是一种可能的索引方式的示例:为了加快col2的查找,右边的树节点包含的是索引键值和一个指向对应数据记录物理地址的指针。这棵树可以看到是排好序的,比当前节点大的数字在其右子树,小的在左子树,通过对树的节点查找快速找到右表中该值的位置。结论:数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,它以某种方式指向数据,这样就可以在这些数原创 2021-01-15 14:36:26 · 118 阅读 · 0 评论 -
MySQL索引分类和基本语法(创建、删除、查看)
种类单值索引:即一个索引只包含单个列。一个表可以有多个单列索引。唯一索引:索引列的值必须唯一,但允许有空值。复合索引:即一个索引包含多个列。假如现在有一个people表,内有字段id(主键不需要做索引),name,age,phone_number(电话号码)那么:单值索引:可以单独用name或age做一个索引,任何一个字段都可以。这样的索引可以做多个。唯一索引:和单值索引一样,但做索引的该字段必须唯一,比如你确定people表中phone_number的值唯一的话,那么便可以在原创 2021-01-15 14:49:35 · 117 阅读 · 0 评论 -
MySQL索引结构 -- BTree索引
BTree索引初始化介绍:如图一颗B+树,浅蓝色表示磁盘块,每个磁盘块包括几个数据项(深蓝色)和指针(黄色)。如磁盘块1包括数据项17和35,包含指针P1、P2、P3;P1表示小于17的磁盘块,P2表示在17-35之间的磁盘块,P3表示大于35的磁盘块。真实的数据只存在于叶子节点,非叶子节点不存储真实数据,只存储指引搜索方向的数据项。如17、35并不真实存在数据表中。查找过程(用上图查找数据项29):首先把磁盘块1由磁盘加载到内存,此时发生一次IO;在内存中用二分查找确定29在17和35之间原创 2021-01-15 15:02:45 · 349 阅读 · 0 评论 -
判断是否需要创建索引
哪些情况需要创建索引主键自动建立唯一索引频繁作为查询条件的字段应该创建索引查询中与其他表关联的字段,外键关系建立索引频繁更新的字段不适合创建索引 – 因为每次更新不只更新记录还会更新索引Where里用不到的字段的不创建索引单键/组合索引的选择问题 – 在高并发下倾向创建组合索引查询中排序的字段 – 排序字段若通过索引去访问将大大提高排序速度查询中统计或者分组字段哪些情况不需要创建索引表记录太少 – mysql300w左右就可以考虑建索引了经常增删改的表 – 因为索引要跟着更新数原创 2021-01-15 15:11:14 · 590 阅读 · 0 评论