首页 / 数据库 / mysql

MySQL 索引及查询优化总结(转)

        MySQL索引的建立对于MySQL的高效运行是很重要的。对于少量的数据,没有合适的索引影响不是很大,但是,当随着数据量的增加,性能会急剧下降。如果对多列进行索引(组合索引),列的顺序非常重要,MySQL仅能对索引最左边的前缀进行有效的查找。下面...

2019-01-03
标签: mysql    100

mysql decimal类型与decimal长度用法详解

三者的区别介绍float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位)double:双精度实型,含字节数为8,64bit数值范围-1.7E308~1.7E308(15个有效位)decimal:数字型,128bit,不存在精度损失,常用于银行帐目计算。(28个...

2018-12-14
标签: mysql    90

MySQL慢查询日志设置和分析

MySQL中的日志包括:错误日志、二进制日志、通用查询日志、慢查询日志等等。这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志。1)通用查询日志:记录建立的客户端连接和执行的语句。2)慢查询日志:记录所有执行时间超过long_query_time秒的所有查询或者不使用索引的查询(1)通用查询...

2018-10-16
标签: mysql    48

数据库分库分表,何时分?怎样分?

一. 数据切分关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。数据库分布式核心内容...

2018-10-09
标签: mysql    64

分库分表操作,如何做到永不迁移数据和避免热点?

中大型项目中,一旦遇到数据量比较大,我们会采用对数据进行拆分的办法来解决数据库压力问题。拆分有垂直和水平两种。垂直拆分比较简单,也就是本来一个数据库,数据量大之后,从业务角度进行拆分多个库。如下图,独立的拆分出订单库和用户库。水平拆分的概念,是同一个业务数据量大之后,进行水平拆分上图中订单数据达到了...

2018-06-11
标签: mysql    51

mysql中FIND_IN_SET和INSTR的使用方法

在mysql中,有时我们在做数据库查询时,需要得到某字段中包含某个值的记录,但是它也不是用like能解决的,使用like可能查到我们不想要的记录,它比like更精准,这时候mysql的FIND_IN_SET函数就派上用场了,下面来具体了解一下。正常where IN() 处理字符串的查询的时候会有问题...

2018-06-05
标签: mysql    71

通俗讲解数据库三范式详解

第一范式强调的是列的原子性,即列不能够再分成其他几列。比如一张用户表: user_table (姓名,性别,电话)在实际场景中,一个用户可能有家庭电话和公司电话,那么这种表结构设计就没有达到 1NF(即表的字段还能继续拆分)。要符合 1NF 我们只需把列(电话字段)拆分,即:user_table (...

2018-02-01
标签: mysql    59

linux下添加mysql用户并授权

平时在开发的过程中我们有时需要用到线上mysql的数据,要是本地直接用root用户登入,可能会误删数据,所以我们可以添加一个权限比较小的账号来连接线上的mysql;1、以管理员身份登录mysqlmysql -u root -p2、选择mysql数据库use mysql3、创建用户同时设置权限gran...

2018-01-02
标签: mysql    52

DB读写分离,主从数据不一致问题的解决方案

概述:在中大型项目中,为了解决大流量请求时,提高系统的吞吐量。因为在整个业务中基本都是读多写少,大部分都是读请求,很小部分是写请求。为了解决这个问题多数的解决方案是采用读写分离,主从复制的方案设计。上图:1)一个主库负责写请求,更新数据2)两个从库负责读请求,可以提高系统吞吐量3)主库和从库之间同步...

2017-11-23
标签: mysql    47

如何保证缓存和数据库双写一致性?

在项目中缓存是经常用到的,为了减少和数据库的交互,小伙伴们利用缓存的思路如下:以上场景需要考虑的是缓存数据更新与数据库一致的问题,主要分为以下几个场景:先更新数据库,再更新缓存存在的问题场景:请求A更新值为99,请求B更新值为98上图流程:1)请求A先发起,更新数据库为99,但还没有来得及更新缓存2...

2017-10-17
标签: mysql  redis    52

分布式中ID唯一的生成方案

在我们的业务需求中通常有需要一些唯一的ID,来记录我们某个数据的标识:某个用户的ID某个订单的单号某个信息的ID分布式系统中我们会对一些数据量大的业务进行分拆,如:用户表,订单表。因为数据量巨大一张表无法承接,就会对其进行分库分表。但一旦涉及到分库分表,就会引申出分布式系统中唯一主键ID的生成问题,...

2017-07-13
标签: mysql    63

MySQL缓冲查询和非缓冲查询

MySQL的客户端有两种类型的查询:缓冲查询:将接收查询的结果并把他们存储在客户端的缓存中,而且接下来获取行记录的请求仅仅从本地内获取。优点:可以在结果集中自由地移动“当前行”的指针,这样很容易找到,因为结果是存在客户端的。缺点:需要额外的内存来存储这些结果集,而且需要大量的内存,另外,php中用来...

2017-06-15
标签: mysql    66

分布式锁的实现方式

什么是分布式锁要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。1.线程锁主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如Synchronized、Lo...

2017-06-13
标签: mysql  redis    80

MySQL主从复制读写分离详解

主从复制:是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是实时的业务数据库,从数据库的作用和使用场合一般有几个:一是作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,解决服务器单点问题;二是可在从数据库进行数据读取操作,这样不影响主数据库的性能;同时可以避免读...

2016-07-16
标签: mysql    37

sql 中的 group by 语句的作用到底是什么

是分组函数比如 现有 性别 男 3 人 体重 50KG/60KG/70 性别 女 2 人 体重 40KG/30KG 这时 你用到group by 进行分组select sum(体重) ,性别 from 表明 group by 性别 ;则能得到结果 男 180女 70等于...

2016-07-06
标签: mysql    45

MyISAM锁表解析及应对方法

MyISAM适合于读频率远大于写频率这一情况。而我目前的应用可能会出现在某一时段读写频率相当。大致如下:一个客户端发出需要长时间运行的SELECT其他客户端在同一个表上发出INSERT或者UPDATE,这个客户将等待SELECT完成另一个客户在同一个表上发出另一个SELECT;因UPDATE或INS...

2016-06-16
标签: mysql    74

mysql中set autocommit=0与start transaction区别

set autocommit=0指事务非自动提交,自此句执行以后,每个SQL语句或者语句块所在的事务都需要显示"commit"才能提交事务,从而释放锁。1、不管autocommit 是1还是0      START TRANSACTION 开启事务后,只有当c...

2016-06-15
标签: mysql    69

MYSQL explain详解

1. id这是SELECT查询序列号。这个不重要,比如嵌套的sql语句,SELECT *FROM (SELECT* FROM a) AS b 。会显示两条数据2.select_type select类型,它有以下几种值 01 simple 它表示简单的select,没有union和子查询 02 pr...

2016-06-08
标签: mysql    40

如何保证redis缓存与数据库mysql双写时一致的问题?

一、对于读操作,流程是这样的讲缓存穿透的时候也提到了:如果从数据库查不到数据则不写入缓存。一般我们对读操作的时候有这么一个固定的套路:1.如果我们的数据在缓存里边有,那么就直接取缓存的。2.如果缓存里没有我们想要的数据,我们会先去查询数据库,然后将数据库查出来的数据写到缓存中。3.最后将数据返回给请...

2016-06-08
标签: mysql  redis    51

redis缓存和mysql数据库同步的问题

解决方案一、对强一致要求比较高的,应采用实时同步方案,即查询缓存查询不到再从DB查询,保存到缓存;更新缓存时,先更新数据库,再将缓存的设置过期(建议不要去更新缓存内容,直接设置缓存过期)。二、对于并发程度较高的,可采用异步队列的方式同步,可采用kafka等消息中间件处理消息生产和消费。三、使用阿里的...

2016-06-07
标签: mysql  redis    63