Mysql
李大爷们
这个作者很懒,什么都没留下…
展开
-
一次IO操作时间的含义是什么
我们在开发过程中,经常在进行sql查询或者写入操作时会谈到一次IO操作的时间,但是这个一次IO操作时间究竟是什么意思,是多久的时间呢。其实,这就要牵扯到数据库存储的原理了,我们都知道,我们的数据库数据实际上是存储在磁盘中的,每次进行读取数据时,其实是去磁盘拿数据,再到内存里面操作的。这里我们首先要理解一下磁盘的一些基本常识,磁盘是如何进行查找数据的呢?磁盘的结构分为移动臂、磁道、读写磁头、柱面等主要部分,如下图所示:而当我们进行例如一个普通的select查询某条数据时,每查询一行数据其实原创 2021-01-27 15:34:31 · 2750 阅读 · 1 评论 -
MYSQL优化之大量数据的limit分页优化
在mysql中,如果我们遇到要查询分页列表的数据,我们正常的sql语句是这样写的(主键索引为user_id):select * from user where 各种条件 limit 0,10这句sql乍一看非常直接明了,没啥毛病,但是当我们的数据量达到了几百万条时,我们要查几万条数据之后的分页,那要怎么处理呢?简单啊,这样写就好了:select * from user where 各种条件 limit 50000,10然而,事情并没有想象中的简单,当我们以这样的方式去查询时,mys...原创 2020-06-05 17:16:25 · 932 阅读 · 1 评论 -
mysql数据库编码设计规范总结
1:数据库表命名设计规则1.以下划线命名法作为表名设计,在第一个下划线之前的字符串应标明对应的模块缩写,若模块名称太长,超过6个字符,可使用缩写表示。例如:sys_user_detail表,sys为声明为系统通用模块,为system的缩写,userDetail以下划线命名法命名。2.在表设计时应该按照对应关系尽量将表设计为一对一、一对多、多对多的形式(特殊设计除外),多对多的中间表命名规则尽量以两个表的表名相拼而成,例如:sys_user表与sys_role表的中间表为sys_user_role表.原创 2020-05-25 10:59:15 · 961 阅读 · 1 评论 -
数据库分区和分表的区别以及其作用
1.为何要分表分区 当我们遇到海量数据存储在数据库中的某张表,此时单个表承受的压力是巨大的。这不但会导致查询变慢,而且由于表的锁机制导致更新修改删除等操作也会受到严重影响(即使是行级锁也会有影响),因此便出现了数据库性能瓶颈。解决数据库瓶颈问题有很多个地方可以进行优化,本篇文章专门针对分区分表进行描述,如果有兴趣了解更多的解决数据库高并发问题的小伙伴可以看我博客的另一篇数据库高并发解决的博客...原创 2020-03-18 10:28:12 · 7212 阅读 · 1 评论 -
高性能Mysql学习日志之范式与反范式(七)
4.3范式与反范式 基本描述:在范式化的数据库中,每个事实数据会出现且仅出现一次,相反的,在反范式化的数据库中,信息是冗余的,他可能会存储在多个地方。 范式化的优点:1.范式化的更新操作通常比反范式要快得多。2.当数据较好的符合范式化时,就只有很少的重复数据,就只需要更少的更新操作。3.范式化的表通常比较小,可以更好放在内存中,所以执行操作会更快。4.很少的多余数据意味着检索数据时需要...原创 2020-01-03 19:56:12 · 520 阅读 · 0 评论 -
高性能Mysql学习日志之自增列、mysql本身的缺陷以及应对措施(六)
4.1.6选择标识列(自增列)标识列,即可以不用手动的插入值,系统提供默认的序列值。为标识列选择适当的数据类型是十分重要的,正确的数据类型会他在查询和连表查询中的性能更加强大。首先,要确保标识列和以该标识列作为外键的所有数据类型都要一致,否则不仅可能导致性能问题,还有可能导致难以发现的报错,这种错误通常很难以发现。其次,尽量满足值的范围需求的同时,应该选择最小的数据类型。因为越小的数据...原创 2019-12-31 11:43:48 · 194 阅读 · 0 评论 -
高性能Mysql学习日志之长字符串类型、时间类型、枚举类型(五)
(接上篇4.1.3)BLOB和TEXT类型 这两个类型都是为了存储数据量很大的字符串而设计的字符串数据类型,BLOB和TEXT分别使用二进制和字符串方式存储。Mysql在对这两个类型处理时,会将它们当做一个独立的对象,当他们的值很大时,InnoDB会专门使用“外部”的存储区域进行存储,在这种情况下,每个值都要额外提供1~4个字节来存储一个指针,以便在外部存储区域存储实际值。 由于B...原创 2019-12-28 10:53:48 · 142 阅读 · 0 评论 -
高性能Mysql学习日志之数据库的数据类型优化原则以及整型数据类型(四)
4.1选择优化的数据类型 Mysql支持的数据类型非常多,而选择合适的数据类型对获得高性能是至关重要的,以下的几个原则有助于对数据类型的设计做出更好的选择。 a.更小的通常更好:尽可能正确存储数据的最小数据类型,这会使之更快,因为他们占用的磁盘、内存和CPU缓存更小,并且处理时需要的CPU周期也更少。 b.简单就好:简单数据类型通常占用更少的CPU周期,例如整型比字符型操作代价更...原创 2019-12-27 13:40:48 · 118 阅读 · 0 评论 -
高性能Mysql学习日志之InnoDB行级锁的替代实现方案(三)
1.4多版本并发控制Mysql的大多数事务型存储引擎的实现都不是基于简单的行级锁。基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制(MVCC)。它的实现是通过保存数据再某个时间点的快照来实现的。当一个事务开始进行时,他无论花了多少时间执行多少次相同的查询,他看到的数据都是一致的。而不同的事务在不同时间点开始事务时,每个事务对同一张表、同一个时刻看到的数据可能都是不相同的,如图所示,事...原创 2019-12-27 09:07:01 · 180 阅读 · 1 评论 -
高性能Mysql学习日志之事务脏读、不可重复读、幻读原理以及排它锁共享锁结合事务的原理解析(二)
1.3事务一个运行良好的事务所必须具备的标准特征:原子性、一致性、隔离性、持久性。1.3.1事务隔离级别Read UnCommitted(未提交读) :指对于一个事务,它即使还没commit,但是他的部分内容却已经被其他事务所看见,即脏读。例如:当你对A表、B表、C表进行一个事务的更新操作。当A表更新完成,B表、C表还没更新,这时候来了另一个事务对A表和B表进行查询操作,此时他能看...原创 2019-12-24 21:50:15 · 215 阅读 · 0 评论 -
高性能Mysql学习日志之Mysq的整体架构描述l(一)
第一章1.1.mysql服务器逻辑架构图在架构图中第一层属于客户端,并不属于mysql,他主要跟mysql进行连接处理、授权认证和安全等交互。第二层服务层为msql的核心架构,mysql的核心服务都在这里,包括缓存、优化、解析、mysql提供的所有的内置函数(包括日期函数、时间函数、数学函数、加密函数等)以及存储过程、触发器和视图都是在这个地方实现的。第三层存储引擎层为my...原创 2019-12-23 21:51:36 · 200 阅读 · 0 评论 -
数据库基础技巧及用法
Mysql基础应用(包括表连接)1.去重查询:distinct只有select语句可以使用它,而且必须放在select之后。例子:select DISTINCT mobile,phone from js_sys_user2.排序查询:order by需要升序排序时,末尾加上ASC;需要降序排序时,末尾加上:DESC,默认的order by是升序排序的。 Order by是可以...原创 2019-02-28 11:08:03 · 557 阅读 · 0 评论