![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL
常敲代码手不生
你越优秀,这个世界便越公平!!!
展开
-
MySQL索引知识复习
在你享受工作舒适的同时,你的危机也已经在慢慢靠近正确的创建合适的索引才是保证数据库性能保证的基础1、索引的底层数据结构:hash,b树,b+树的区别,逐层分析为什么最后选用了b+树作为索引结构?2、聚集索引、普通索引的区别、联系3、索引建立的原则:列的离散性,离散度越大,建立索引后的访问效果越好 最左匹配原则 联合索引(多列索引、而不是多个索引) 覆盖索引定义一条慢SQL查询where后面有很多的查询字段,我们该如何建立联合索引?遵循的原则:最左匹配原则>离散度高原则&原创 2021-04-03 10:32:28 · 89 阅读 · 0 评论 -
MySQL中count(*)用法
count()函数:一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值对不同count()统计函数性能分析:server 层要什么就给什么;InnoDB 只给必要的值;现在的优化器只优化了 count(*) 的语义为“取行数”,其他“显而易见”的优化并没有做count(主键id):每一行的 id 值都取出来,返回给 server 层。server 层拿到 id 后,判断是不可能为空的,就按行累加 count(1):In原创 2020-10-28 20:57:58 · 7149 阅读 · 2 评论 -
MySQL查询语句优化
慢查询原因1 从数据库请求不需要的数据例如业务只需要返回指定的列,sql查询全部列,或者多表关联返回全部列。 某些相同数据被重查询多次,可以结合实际业务在初次查询后进行缓存,需要时候从缓存中取出2 扫描额外的记录行2 解决方法1 扫描行数过多如果发现查询需要扫描大量的数据但是只返回少量的行,那么可以尝试如下优化:使用索引覆盖扫描 改变库表结构,例如使用单独的汇总表 重写这个复杂查询也即重构该查询,让MySQL以更优化方式执行查询2 重构查询方式主要提供几种优化数据库..原创 2020-10-16 10:12:12 · 172 阅读 · 0 评论 -
高性能索引设计
索引的优点减少了服务器需要扫描的数据量 帮助服务器避免排序和临时表 将随机I/O变成顺序I/O索引的类型B-Tree索引B-TREE通常就意味着里面存储的所有值都是有序的,并且查询的时候,不用全表扫描,而是按照索引结构查找,所以会更快 INNODB使用的B+TREE,B+TREE是B-TREE的一个变种,区别是B+TREE为所有叶子结点增加了一个存储指向下个叶子结点的链指针和所有关键字都在叶子结点中出现.适用的查询范围:全值匹配。和索引中的所有列进行匹配。 匹配最左前缀。多列索引原创 2020-10-15 18:36:33 · 57 阅读 · 0 评论 -
MySQL表结构设计之范式化和反范式化对比
优点 缺点 范式 1、范式化的更新操作通常比反范式化要快,只需要修改较少数据。 2、范式化的表通常更小,可以更好地放在内存里,所以执行操作会更快。 复杂的查询语句在符合范式的schema上都可能需要至少一次关联,关联表的代价昂贵,也可能使得索引失效 反范式 1、数据都在一张表中,可以避免表关联,最差情况全表扫描。 2、可以设计有效的...原创 2020-10-15 14:15:06 · 257 阅读 · 0 评论 -
MySQL之表结构设计
Schema设计原则 :更小的数据类型,根据估计选择不会超过范围的最小数据类型。 简单数据类型的操作通常需要更少的CPU周期。例如整型比字符操作代价更低,因为字符集和校对规则(排序规则)使字符比较比整型比较更复杂。尽量避免NULL:最好指定列为NOT NULL,除非真的需要存储NULL值。NULL列使得索引、索引统计和值比较都更复杂,使用更多的存储空间。如果计划在列上建索引,就应该尽量避免设计成可为NULL的列实数类型FLOAT 和 DOUBLE类型支持使用标准的浮点运算进行近似计算。.原创 2020-10-15 14:08:19 · 530 阅读 · 0 评论 -
MyBatis 多表联合查询及优化
下面就来说一下 mybatis 是通过什么来实现多表联合查询的。首先看一下表关系,如图:这里,我已经搭好了开发的环境,用到的是 SpringMVC + Spring + MyBatis,当然,为了简单期间,你可以不用搭前端的框架,只使用 Spring + MyBatis 就可以,外加 junit 测试即可。环境我就不带大家搭了,这里只说涉及到联合查询的操作。设计原创 2016-07-08 18:03:05 · 2717 阅读 · 4 评论 -
谈谈数据库连接池的原理
谈谈数据库连接池的原理 帅宏军 这次我们转载 2016-08-10 14:54:53 · 1206 阅读 · 0 评论 -
MySQL数据库事务中的行级锁,表级锁,页级锁
锁定用于确保事务完整性和数据库一致性。 锁定可以防止用户读取其他用户正在更改的数据,并防止多个用户同时更改相同的数据。 如果不使用锁定,数据库中的数据可能在逻辑上变得不正确,而针对这些数据进行查询可能会产生想不到的结果。在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足。在数据库的锁机制中介绍过,在DBMS中,可以按照锁的粒度把转载 2016-06-04 16:03:22 · 1701 阅读 · 0 评论 -
MySQL对一行多列求和
SUM函数的语法是:SELECT SUM(expression ) FROM tables WHERE predicates;表达式可以是一个数值字段或公式。SELECT 列1+列2+列3……+列N AS Total FROM 表或者select SUM(group_type+group_num_d原创 2016-07-11 13:20:47 · 101068 阅读 · 12 评论 -
MySQL实现当前数据表的所有时间都增加或减少指定的时间间隔
做了一个简答的小项目,其中遇到了一些数据库的sql使用技巧总结如下:DATE_ADD() 函数向日期添加指定的时间间隔。当前表所有数据都往后增加一天时间:UPDATE ACT_BlockNum SET CreateTime = DATE_ADD(CreateTime, INTERVAL 1 DAY);当前表所有数据都往前减少一天时间:UPDATE ACT_Block原创 2016-06-29 20:23:59 · 4028 阅读 · 0 评论 -
Mysql中int(M)的含义
转载自 http://hi.baidu.com/nancy0754/blog/item/2f3ea13a957a27d7d5622535.html1 bytes = 8 bit ,一个字节最多可以代表的数据长度是2的8次方 11111111 在计算机中也就是-128到1271.BIT[M]位字段类型,M表示每个值的位数,范围从1到64,如果M被忽略,默认为1原创 2016-07-27 16:05:55 · 12872 阅读 · 2 评论 -
MySQL分页查询小技巧
当提到查询数据库中某个指定起始位置到特定位置的数据时,我们的第一个反应是采用如下的语法格式:limit是mysql的语法select * from table limit m,n其中m是指记录开始的index,从0开始,表示第一条记录n是指从第m+1条开始,取n条。select * from tablename limit 2,4即取出第3条至第6条,4条记录这样的用法对小数原创 2016-07-27 23:43:28 · 362 阅读 · 0 评论 -
数据库的垂直切分和水平切分
数据切分可以是物理上的,对数据通过一系列的切分规则将数据分布到不同的DB服务器上,通过路由规则路由访问特定的数据库,这样一来每次访问面对的就不是单台服务器了,而是N台服务器,这样就可以降低单台机器的负载压力。数据切分也可以是数据库内的,对数据通过一系列的切分规则,将数据分布到一个数据库的不同表中,比如将article分为article_001,article_002等子表,若干个子表水平拼转载 2016-08-03 17:13:58 · 405 阅读 · 0 评论 -
Select count(*)和Count(1)的区别和执行效率比较
在MySQL中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数。很多人其实对这三者之间是区分不清的。经常会看到一些所谓的优化建议不使用Count(* )而是使用Count(1),从而可以提升性能,给出的理由是Count( *)会带来全表扫描。 Count(1)和Count(*)实际上的意思是,评估Count()中的表达式是否为NULL,如果为NULL则不计原创 2016-03-31 21:54:43 · 6617 阅读 · 2 评论