MySQL
i-neojos
古之成大事者,不惟有超世之才,亦必有坚忍不拔之志
展开
-
MySQL SQL语句
SQL 语法的背后有很多原理,搞清楚背后的原理,写 SQL 的时候才能显得丝滑。不过,我总是经常忘记一些 SQL,有时候会陷入自我怀疑,还是得回过头来去看看 SQL 的用法。索性还蹩脚的掌握了些英文,历史上又多次看过,再看一遍 SQL 的用法也不是特别费劲。原创 2023-05-22 00:02:15 · 76 阅读 · 0 评论 -
Order By 排序
MySQLOrderBy排序的两种策略,OrderBy排序的时候,会结合select字段的个数,已经字段占用的空间做评估。类似于,MySQL在数据块上查找数据使用快速排序一样,MySQL排序使用归并算法,会生成多个临时文件进行排序,最后做合并返回。如果select的字段比较多,一行占用的空间比较大,MySQL只会将进行排序的字段和主键ID取出来放到内存或者临时文件进行排序。Redis也有很多这样的处理,比如根据数据的大小和数量进行的特殊编码,ziplist之类的。2022年7月27日。...原创 2022-07-28 08:34:16 · 175 阅读 · 0 评论 -
mysql count统计
标记删除和内存复用,也是内存池的设计,一旦内存被申请,当内存被释放的时候,会回归内存池,供别的操作使用。按照这个理解,磁盘占用的空间也不会被回收,因为磁盘的合并操作也是比较耗时的。如果我们删除了内存行,就做内存回收,内存空间合并,性能肯定是不符合要求的。主要是因为被删除的行实际是只是被标记删除,表示它的空间后续可以被复用,实际占用的内存并不会减少。如果我们一次性删除多行,就可能会释放多个内存块,这些内存块也不会被释放,也会被用来复用。内存行的复用有限制,但内存块可以被存放任何数据,没有数据范围限制。...原创 2022-07-26 08:22:31 · 148 阅读 · 0 评论 -
MySQL删除行之后空间没有被释放
标记删除和内存复用,也是内存池的设计,一旦内存被申请,当内存被释放的时候,会回归内存池,供别的操作使用。按照这个理解,磁盘占用的空间也不会被回收,因为磁盘的合并操作也是比较耗时的。如果我们删除了内存行,就做内存回收,内存空间合并,性能肯定是不符合要求的。主要是因为被删除的行实际是只是被标记删除,表示它的空间后续可以被复用,实际占用的内存并不会减少。如果我们一次性删除多行,就可能会释放多个内存块,这些内存块也不会被释放,也会被用来复用。内存行的复用有限制,但内存块可以被存放任何数据,没有数据范围限制。...原创 2022-07-25 08:10:05 · 910 阅读 · 0 评论 -
MySQL为什么会抖一下
MySQL为了提高处理效率,使用了redolog和内存结合的方式,当查询数据时,如果发现内存中存在数据,就直接使用内存中的数据返回,当写入数据时,会先写到redolog和内存中,如果内存中的数据和磁盘中的数据不一致,就认为是脏页。而如果数据读取的时候,发现内存中没有可用的数据页,会查找最近最长时间不被使用的内存页,而如果这个内存页正好是脏页,也需要将内存中的数据同步到磁盘。使用数据存储的时候,总会出现一些突然超时的情况,幸运的话,数据存储提供了监控平台,我们进入监控平台能假装观察点什么线索。...原创 2022-07-24 16:22:06 · 409 阅读 · 0 评论 -
MySQL字符串索引
这种Md5的转换本身特别常见,比如想以中文作为Key的查询场景,这种转换其实就是有必要的,将中文base64编码或者MD5都可以,对查询到的结果在做一次匹配。比如一个长度为18位字符串,如果创建前缀6的索引,很明显,如果前缀6的区分度不是特别高的话,我们每次通过索引前缀匹配到的行可能都是不符合查询条件的行。针对前缀索引的情况,即使命中了覆盖索引,MySQL还是无法确认是否真实查找到了数据,还是需要回表查看的。如何设置前缀索引的长度呢,如果存储的是身份证,前缀索引该如何设置呢?如何给身份证设置前缀索引呢?..原创 2022-07-24 00:35:04 · 1507 阅读 · 0 评论 -
MySQL用错索引
周四了,MuSQL为什么会用错索引,之前在工作中就有遇到过MySQL用错索引的情况,当时使用force强制指定了索引才解决。除了强制指定使用索引外,还可以诱导MySQL使用正确的索引。在使用explain分析MySQL的索引计划的时候,有一个预估行扫描数是一个采样的结果,计算内存页采样的平均值再乘以内存页的个数。在工作中遇到MySQL使用索引出问题的情况越来越少了,可能是因为现在数据库的种类现在越来越多了。本身强制指定索引就是一个非常不通用的做法,因为索引本身是变更的,代码需要跟着索引去变更。......原创 2022-07-21 08:29:21 · 302 阅读 · 0 评论 -
2022.07.19 MySQL唯一索引
从数据写入的角度来分析,如果是唯一索引,当发现内存中不存在时,直接将数据写入到changebuffer中就返回了。后续会有异步的merge同步磁盘的操作。但唯一索引不同,因为需要判断数据是否唯一,所以,需要先访问磁盘将数据读出来判断,这就完全用不到channgebuffer的能力。从数据读取的角度来分析,因为MySQL是按照数据页来读取的,数据页内部又按照二叉树进行数据查找,如果是唯一索引,读取到数据就直接返回了,如果是普通索引,还需要继续向后遍历,直到遇到不匹配的数据位置。2022年7月19日。...原创 2022-07-20 08:29:28 · 163 阅读 · 0 评论 -
redo log
熟知的WAL,全称WriteAheadLogging,就是先写日志再写磁盘。Append写日志是顺序操作,而写磁盘是随机寻址,日志的操作效率要明显高于磁盘。第一阶段,数据先写入日志,状态是Prepare。而这个额外的工作会影响最终日志的情况。RedoLog的写操作使用的是固定长度的循环队列,循环队列的两个指针分表表示数据写入的位置A和数据被擦除(同步到磁盘)的位置B。当数据被写满的时候,队列中的数据会被强制同步到磁盘。比如,一个订单日志表中单条记录可以记录订单的多个状态,已支付、已发货、已签收等。...原创 2022-07-17 06:45:37 · 357 阅读 · 0 评论 -
MySQL Order By 排序
在使用 order by 的时候会经常遇到 Using temporary 和 Using filesort,带着两个标志的查询代价往往会比较大。在设计的时候,要尽量避免这种情况。排序算法我们使用下面的 SQL 语句来举例说明SELECT id, qid, title, summary from t_topic_post order by qid;※第一种是所有字段直接在内存中进行排序,排序完成后直接返回。这要求内存能够放下所有的字段,尤其是 SELECT 选择的字段比较多的情况。这种算法的思原创 2022-05-11 00:13:43 · 287 阅读 · 0 评论 -
范围查询
查看 mysql range optimization 有对Range Query的解释。其中有这样的描述,是针对联合索引的,这里截取其中的原文:For the following expression, the optimizer uses = from the first comparison. It also uses >= from the second comparison b...原创 2020-03-09 22:01:13 · 266 阅读 · 0 评论 -
MySQL基本操作
sql的一些简单语句操作原创 2015-03-26 22:24:51 · 541 阅读 · 0 评论 -
死锁-1.0.2
If a secondary index is used in a search and index record locks to be set are exclusive(如果在查询中使用了二级索引,索引记录会被加上排他锁), InnoDB also retrieves the corresponding clustered index records and sets locks on th翻译 2016-02-26 23:31:46 · 921 阅读 · 2 评论 -
死锁-1.0.1
每天花点时间去消化,或多或少就会有点收获。 希望大家共同的来发表自己的看法。 这里摘的地址是:Locks Set by Different SQL Statements in InnoDB翻译 2016-02-26 22:41:04 · 616 阅读 · 0 评论 -
对MySQL加锁的初步理解(一)
博客地址:http://write.blog.csdn.net/mdeditor#!postId=50706285事务的情景: 在并发的情况下,确保请求能够被正确执行。事务保证两个请求‘读取’不到相同的数据结果,执行过程中数据不会被别的会话所修改。 与事务相似的是语言层面的重试机制,当请求因为并发出错时,会发起若干次重试。对重试的条件需要明确,比如只有当$e->ge原创 2016-02-20 21:43:50 · 936 阅读 · 1 评论 -
统计脚本梳理
总结这次的job: 1. 分清楚这两种统计的不同方式。全表扫描和使用id按条件扫描。因为他们对于退出循环的条件是完全不同的,要保持清醒,不要混淆。 2. 认真分析循环结束的条件,是否会按照想象的方式结束循环。这当然是相当重要的了。好好想象是否真的能够达到退出循环的条件。 3. 确保每次的循环记录有try-catch包裹,让job不会因为异常而退出。 4. 要统计执行一次循环所花费的时间。比如这个例子,统计3000条记录会花费的时间,当然他的统计是有瑕疵的,因为是从job开始到每次循环结束的时原创 2016-01-25 22:45:09 · 986 阅读 · 1 评论 -
基础SQL语句-UPDATE
基础的东西如果不及时回顾,还是会零星的忘记一些。所以看了一下update的操作。翻译 2016-01-24 15:13:28 · 678 阅读 · 0 评论 -
MySQL-explain-1
mysq语句的explain使用原创 2015-07-16 23:25:09 · 566 阅读 · 0 评论 -
MySQL-SQL_CALC_FOUND_ROWS
在程序SQL慢查询中遇到SQL_CALC_FOUND_ROWS,记录一下用法。转载 2015-07-18 17:24:25 · 3290 阅读 · 0 评论 -
MySQL-内存表
MySQL中内存表转载 2015-07-02 23:16:56 · 668 阅读 · 0 评论 -
MySQL-分区表-2
mysql分区表介绍2原创 2015-06-15 23:43:33 · 1077 阅读 · 0 评论 -
MySQL-config-slow
mysql数据库下的慢查询原创 2015-07-19 00:36:53 · 504 阅读 · 0 评论 -
mongodb-mysql-优缺点
mongodb数据操作上的弱一致性(最终一致性),在大数据处的处理上非常快,其文件存储对磁盘空间的占用也比较严重,支持文档的嵌套,数组结构,支持逆结构化处理。......转载 2015-07-01 00:08:16 · 669 阅读 · 0 评论 -
MySQL-分区表-1
mysql分区表原创 2015-06-07 14:53:50 · 1095 阅读 · 0 评论 -
MySQL-分区表-0
转载地址:点击打开链接 或者 点击打开链接原博客介绍的非常好,请跳转到原博客浏览吧分区表1. 定义:表的分区指根据可以设置为任意大小的规则,跨文件系统分配单个表的多个部分。实际上,表的不同部分在不同的位置被存储为单独的表。用户所选择的、实现数据分割的规则被称为分区函数,这在MySQL中它可以是模数,或者是简单的匹配一个连续的数值区间或数值列表,或者是一个内部HASH函数,或转载 2015-05-27 01:16:11 · 632 阅读 · 0 评论 -
MySQL-B+树索引
在数据库中B+树的高度一般都在2~3层,也就是对于查找某一键值的行记录,最多只需要2到3次的IO。InnoDB存储引擎表是索引组织表,即表中数据按照主键顺序存放。而聚集索引就是按照每张表的主键构造一颗B+树,并且叶子节点存放整张表的行记录数据,因此也让聚集索引的叶子节点成为数据页。聚集索引的这个特性决定了索引组织表中数据也是索引的一部分。同B+树结构一样,每个数据页都是通过一个双向链表来进行链接。原创 2015-06-17 00:22:52 · 1611 阅读 · 0 评论 -
MySQL-index
MySQL创建索引应该注意的问题原创 2015-07-18 22:52:24 · 506 阅读 · 0 评论 -
MySQL-connection-1
连接数据库的操作原创 2015-01-08 21:53:32 · 961 阅读 · 0 评论 -
MySQL-Slow-2
mysqldumpslow命令查看慢查询转载 2015-07-20 23:39:57 · 488 阅读 · 0 评论 -
mysql性能优化
mysql performance optimization转载 2015-09-06 00:06:35 · 533 阅读 · 0 评论 -
MySQL-function-unix_timestamp
mysql语句中的unix_timestamp函数跟php中的time函数是一致的。转载 2015-07-16 23:07:13 · 917 阅读 · 0 评论