![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
mysql
娜小喵儿~
这个作者很懒,什么都没留下…
展开
-
数据库SQL优化总结
数据库SQL优化总结百万级数据库优化方案对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如select id from t where num is null最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据...转载 2020-01-17 11:55:09 · 392 阅读 · 0 评论 -
数据库读写分离
读写分离的基本原理让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE)操作,而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到其他从数据库。以SQL为例,主库负责写数据、读数据。读库仅负责读数据。每次有写库操作,同步更新到读库。写库就一个,读库可以有多个,采用日志同步的方式实现主库和多个读库的数据同步。Replication原理Mys...转载 2019-09-26 09:33:47 · 119 阅读 · 0 评论 -
数据库读写分离解决的问题
有一些技术同学可能对于“读写分离”了解不多,认为数据库的负载问题都可以使用“读写分离”来解决。这其实是一个非常大的误区,我们要用“读写分离”,首先应该明白“读写分离”是用来解决什么样的问题的,而不是仅仅会用这个技术。什么是读写分离?其实就是将数据库分为了主从库,一个主库用于写数据,多个从库完成读数据的操作,主从库之间通过某种机制进行数据的同步,是一种常见的数据库架构。一个组从同步集群,通常...转载 2019-09-25 18:15:12 · 445 阅读 · 0 评论 -
为什么我们不建议使用select*查询
过多的多余字段会带来数据传输的速度问题,即使MySql客户端和服务端是处在同一台机器上,但是MySql还是使用的TCP协议进行数据传输,过多的字段必定带来的是数据传输速度的下降。如果字段中出现类似于text,blob这种长度较大的字段时,MySql会将大长度的字段存储在其他空间中,不会和其他字段进行相同空间的存储,所以select * 会增加I/O次数。由于我们在使用select * 进行查...转载 2019-09-16 18:44:34 · 1785 阅读 · 0 评论 -
Mysql-覆盖索引
概念如果索引包含所有满足查询需要的数据的索引成为覆盖索引(Covering Index),即不需要回表操作判断sql是否使用了覆盖索引我们可以通过expalin来判断查询是否覆盖索引,主要看extra字段是否有 using index 。覆盖索引的优势使用覆盖索引的点在于其不用回表操作,不需要回表操作有哪些优势呢?索引条目通常远小于数据行大小,只需要读取索引,则mysql会极大地减少...转载 2019-09-16 18:40:54 · 183 阅读 · 0 评论 -
聚簇索引与非聚簇索引(也叫二级索引)
通俗点讲聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,myisam通过key_buffer把索引先缓存到内存中,当需要访问数据时(通过索引访问数据),在内存中直接搜索索引,然后通过索引找到磁盘相应数据,这也就是为什么索引不在key buffer命中时,速度慢的原因澄清一个概念:innodb中,在聚簇索引...转载 2019-09-04 18:43:04 · 640 阅读 · 0 评论 -
Mysql悲观锁与乐观锁
悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。乐观锁总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但...转载 2019-09-04 17:12:42 · 74 阅读 · 0 评论 -
Laravel批量更新多条数据
前言近期在刷新生产环境数据库的时候,需要更新表中的字段,如果对每条数据结果都执行一次update语句,占用的数据库资源就会很多,而且速度慢,显得也不高大上。因为项目是Laravel框架,Laravel有批量插入的方法,却没有批量更新的方法,没办法只能自己实现。准备mysql case…when的用法MySQL 的 case when 的语法有两种:简单函数CASE [col_na...原创 2019-09-04 11:59:22 · 13962 阅读 · 0 评论 -
一条SQL语句执行得很慢的原因有哪些?
说实话,这个问题可以涉及到 MySQL 的很多核心知识,可以扯出一大堆,就像要考你计算机网络的知识时,问你“输入URL回车之后,究竟发生了什么”一样,看看你能说出多少了分类讨论一条 SQL 语句执行的很慢,那是每次执行都很慢呢?还是大多数情况下是正常的,偶尔出现很慢呢?所以我觉得,我们还得分以下两种情况来讨论。1、大多数情况是正常的,只是偶尔会出现很慢的情况。2、在数据量不变的情况下,这条...转载 2019-09-03 18:37:55 · 552 阅读 · 0 评论 -
一条SQL语句在MySQL中如何执行的
本篇文章会分析一个 sql 语句在 MySQL 中的执行流程,包括 sql 的查询在 MySQL 内部会怎么流转,sql 语句的更新是怎么完成的。在分析之前我会先带着你看看 MySQL 的基础架构,知道了 MySQL 由那些组件组成以及这些组件的作用是什么,可以帮助我们理解和解决这些问题。MySQL 基础架构分析MySQL 基本架构概览下图是 MySQL 的一个简要架构图,从下图你可以很清...转载 2019-09-03 10:42:21 · 1105 阅读 · 0 评论 -
数据库事务的特性和隔离级别
数据库事务的特性在数据库操作中,一项事务(Transaction)是由一条或多条操作数据库的 SQL 语句组成的一个不可分割的工作单元,这些操作要么都完成,要么都取消。接下来将围绕事务的特性、并发问题以及隔离级别进行讲解。原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。比如在同一个事务中的SQL语句,要么全部执行成功,要么全部执...原创 2019-09-02 16:38:41 · 117 阅读 · 0 评论 -
Mysql 索引原理
背景MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容...转载 2019-09-02 11:08:00 · 103 阅读 · 0 评论 -
Mysql慢查询分析和优化
慢查询优化神器 - explain命令关于explain命令相信大家并不陌生,这里需要强调rows是核心指标,绝大部分rows小的语句执行一定很快(有例外,下面会讲到)。所以优化语句基本上都是在优化rows。慢查询优化基本步骤先运行看看是否真的很慢,注意设置SQL_NO_CACHEwhere条件单表查,锁定最小返回记录表。这句话的意思是把查询语句的where都应用到表中返回的记录数...转载 2019-08-30 17:49:04 · 247 阅读 · 0 评论 -
MySQL Explain详解
mysql Explain在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以...转载 2019-08-11 16:30:19 · 112 阅读 · 0 评论 -
记一次失败的刷数据经历
记一次失败的刷数据经历最近因业务需求需要刷新线上的数据,遇到几个问题。分批获取数据,切忌将所有数据获取之后再操作原本想着线上的数据量也没有多少,在取数据的时候就没有分批次取,将所有的数据拿出来之后内存直接溢出了。数据表的备份因为是对原有的数据表进行操作,所以需要将原来的表备份,以便出了问题还原DROP TABLE IF EXISTS A_bak;CREATE TABLE A_bak ...原创 2019-07-28 10:13:59 · 263 阅读 · 0 评论