系列文章 三.MySQL强人"锁"难<死磕MySQL系列 三> 四.S 锁与 X 锁的爱恨情仇<死磕MySQL系列 四> 五.如何选择普通索引和唯一索引<死磕MySQL系列 五> 六.五分钟,让你明白MySQL是怎么选择索引<死磕MySQL系列 六> 相信大多数小伙伴跟咔咔一样,给字符串添加索引从未设置过长度,今天就来聊聊如何正确的给字符串加索引. 一.如何建立索引 大多数系统都会存在用户表,并且系统初始设计使用了手机号码登录的. 这是产…
前面讲了如何设计数据库表结构.存储引擎.索引优化等内存,这篇文章会讲述如何进行SQL优化,也是面试中关于数据库肯定会被问到的, 这些内容不仅仅是为了面试,更重要的是付诸实践,最终用到工作当中 之前的MySQL内存地址:MySQL系列内容 如何获取存在性能的SQL: 1.通过生产环境用户.测试人员反馈的应用响应速度较慢,可能就是SQL性能较差导致的 2.通过慢查询日志获取 3.实时获取存在性能问题的SQL MySQL慢查日志: 参数: 1.slow_query_log 是否启动慢查询日志,默认不开…
InnoDB在MySQL5.6版本后作为默认存储引擎,也是我们大部分场景要使用的,而InnoDB索引通过B+树实现,叫做B-tree索引.我们默认创建的 索引就是B-tree索引,所以理解B-tree索引的基本原理很重要,面试也是可能被问到的. 我们按照二叉查找树-->B树-->B+树-->B-tree索引-->页的顺序去了解 二叉查找树: 这里关于二分搜索树的原理就不做赘述了,可以参考:Java数据结构和算法(六)--二叉树 二分搜索树有个致命缺点就是数据如果是有序/倒叙插入的话…
本篇深入了解查询优化和服务器的内部机制,了解MySql如何执行特定查询,从中也可以知道如何更改查询执行计划,当我们深入理解MySql如何真正地执行查询,明白高效和低效的真正含义,在实际应用中就能扬长避短. 声明:本人使用的数据库版本为MySql 5.1 一.基本原则:优化数据访问 查询性能低下的最基本原因就是访问了太多数据,一些查询要不可避免地筛选大量的数据,大部分性能欠佳的查询都可以用减少数据访问的方式进行优化. 1.首先分析应用程序是否正在获取超过需要的数据,这通常表现在获取了过多的行或列.…
MySQL优化概述 MySQL数据库常见的两个瓶颈是:CPU和I/O的瓶颈. CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候. 磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应用分布在网络上,那么查询量相当大的时候那么平瓶颈就会出现在网络上. 我们可以用mpstat, iostat, sar和vmstat来查看系统的性能状态.除了服务器硬件的性能瓶颈,对于MySQL系统本身,我们可以使用工具来优化数据库的性能. MySQL优化方案 Mysql的优化,大体可以分为三部分:索…
一.SQL性能下降原因 1.等待时间长?执行时间长? 可能原因: 查询语句写的不行 索引失效(单值索引.复合索引) CREATE INDEX index_user_name ON user(name); (底层做了一个排序) CREATE INDEX index_user_nameEmail ON user(name,email); 技术原理参见:http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html 索引入门知识参见:htt…
良好的数据库逻辑设计和物理设计是数据库高性能的基础,所以对于数据库结构优化是很有必要的 数据库结构优化目的: 1.减少数据的冗余 2.尽量避免在数据插入.删除和更新异常 例如:有一张设计不得当的学生选课表 CREATE TABLE selectcourse( stu_no INT(11) NOT NULL COMMENT '学号', stu_name VARCHAR(10) NOT NULL COMMENT '学生姓名', birth_date TIMESTAMP NOT NULL DEFAUL…
更多内容:https://www.toutiao.com/i6599796228886626829/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1&timestamp=1542253804&app=news_article&utm_source=weixin&iid=50908871866&utm_medium=toutiao_android&group_id=6599796…
一.索引基本知识 1.索引的优点 1.减少了服务器需要扫描的数据量 2.帮助服务器避免排序和临时表 例子: select * from emp orde by sal desc; 那么执行顺序: 所以有索引的话就不会创建零时表,临时表中,磁盘零时表比内存临时表更加的消耗性能. 3.将随机IO变成顺序IO 如何理解随机IO与顺序IO呢?如图: 这是一个磁盘,B是几何扇区(仅做标记,无特殊含义),A是磁道,C是扇区(sector,是物理读写的基本单位,通常是512字节),D由这样的多个扇区连在一起称…
一.前言 在前面的文章Mysql系列四:数据库分库分表基础理论中,已经说过分库分表需要应对的技术难题有如下几个: 1. 分布式全局唯一id 2. 分片规则和策略 3. 跨分片技术问题 4. 跨分片事物问题 下面我们来看一下Mycat是如何解决分布式全局唯一id的问题的 二.Mycat全局序列号 Mycat保证id唯一的方式有如下几个: 1)本地文件方式 2)数据库方式 3)时间戳方式 4)ZKID生成器 5)ZK递增ID 推荐使用第4,5种 以上5中方式都要统一在server.xml文件中开启全…
一.SQL在数据库中的执行过程 二.执行计划 1. ACID 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节.事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样.一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏.这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度.串联性以及后续数据库可以自发性地完成预定的工作.隔离性:数据库允许多个并发事务同时对其数据进行…
原文链接:http://www.cnblogs.com/liulei-LL/p/7729983.html 一.表设计 1. 库名.表名.字段名使用小写字母,“_”分割. 2. 库名.表名.字段名不超过12个字符. 3. 库名.表名.字段名见名知意,尽量使用名词而不是动词. 4. 优先使用InnoDB存储引擎. 5. 存储精确浮点数使用DECIMAL替代FLOAT和DOUBLE. 6. 使用UNSIGNED存储非负数值. 7. 使用INT UNSIGNED存储IPV4.[FAQ] 8. 整形定义中…
14-补充内容:MySQl创建用户和授权   权限管理 我们知道我们的最高权限管理者是root用户,它拥有着最高的权限操作.包括select.update.delete.update.grant等操作.那么一般情况在公司之后DBA工程师会创建一个用户和密码,让你去连接数据库的操作,并给当前的用户设置某个操作的权限(或者所有权限).那么这时就需要我们来简单了解一下: 如何创建用户和密码 给当前的用户授权 移除当前用户的权限 如果你想创建一个新的用户,则需要以下操作: 1.进入到mysql数据库下…
一.建立适当的索引 说起提高数据库性能,索引是最物美价廉的东西了.不用加内存,不用改程序,不用调sql,只要执行个正确的'create index',查询速度就可能提高百倍千倍,这可真有诱惑力.可是天下没有免费的午餐,查询速度的提高是以插入.更新.删除的速度为代价的,这些写操作, 增加了大量的I/O. 是不是建立一个索引就能解决所有的问题?ename上没有建立索引会怎样? select * from emp where ename='研发部'; ---测试案例命令如下 (最好以 select *…
项目中如果表中的数据过多的话,会影响查询的效率,那么我们需要想办法优化查询,通常添加索引就是我们的选择之一: 1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引) mysql>ALTER TABLE `table_name` ADD UNIQUE ( `column` ) 3.添加INDEX(普通索引) mysql>ALTER TABLE `ta…
数据库及表结构基本设计规范 1. 所有表必须使用Innodb存储引擎 没有特殊要求(即Innodb无法满足的功能如:列存储,存储空间数据等)的情况下,所有表必须使用Innodb存储引擎(mysql5.5之前默认使用Myisam,5.6以后默认的为Innodb).Innodb 支持事务,支持行级锁,更好的恢复性,高并发下性能更好. 2. 优先选择符合存储需要的最小的数据类型 列的字段越大,建立索引时所需要的空间也就越大,索引的性能也越差. 3. 尽可能把所有列定义为NOT NULL 索引NULL列…
一.背景 随着公司业务的发展,商品库存从商品中心独立出来成为一个独立的系统,承接主站商品库存校验.订单库存扣减.售后库存释放等业务.在上线之前我们对于核心接口进行了压测,压测过程中出现了 MySQL 5.6.35 死锁现象,通过日志发现引发死锁的只是一条简单的sql,死锁是怎么产生的?发扬技术人员刨根问底的优良传统,对于这次死锁原因进行了细致的排查和总结.本文既是此次过程的一个记录. 在深入探究问题之前,我们先了解一下 MySQL 的加锁机制. 二.MySQL 加锁机制 首先要明确的一点是 My…
影响数据库性能的因素: 1.硬件环境:CPU.内存.存盘IO.网卡流量等 2.存储引擎的选择 3.数据库参数配置(影响最大) 4.数据库结构设计和SQL语句 MySQL采用插件式存储引擎,可以自行选择,但同时如何选择也成了问题,本文会介绍存储引擎的特点,以及如何选择 MySQL体系结构: Server用来实现所有与存储引擎无关的事:比如,查询语句等 MySQL所支持的存储引擎如下:通过show engines查询 MyISAM:MySQL5.5版本之前默认的存储引擎 MyISAM的表由FRM(存…
问题一:远程登录报错Host '192.168.181.201' is not allowed to connect to this MySQL server 解决: 问题二:MySql access denied for user…
数据库的基本操作 在MySQL数据库中,对于一个MySQL示例,是可以包含多个数据库的. 在连接MySQL后,我们可以通过 show databases; 来进行查看有那么数据库.这里已经存在一些库了,其中information_schema.auth.mysql.performance_schema这几个库时是MySQL内置的(不同版本略有差异). 那如何新建自己的数据库呢?使用CREATE DATABASE 数据库名; 即可. CREATE DATABASE 数据库名; 这里我们已经成功创建…
系列文章 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强人"锁"难<死磕MySQL系列 三> 四.S 锁与 X 锁的爱恨情仇<死磕MySQL系列 四> 五.如何选择普通索引和唯一索引<死磕MySQL系列 五> 如果你对索引的知识点还不太清楚,可以直接通过传送门查看咔咔总结的索引知识点. 揭开MySQL索引神秘面纱 索引是为加速查询速度,创建的索引也符合所有规则,但MySQL就是不使用理想的索引,导致…
群里一个小伙伴在问为什么MySQL字符串不加单引号会导致索引失效,这个问题估计很多人都知道答案.没错,是因为MySQL内部进行了隐式转换. 本期文章就聊聊什么是隐式转换,为什么会发生隐式转换. 系列文章 字符串可以这样加索引,你知吗?<死磕MySQL系列 七> 无法复现的"慢"SQL<死磕MySQL系列 八> 什么?还在用delete删除数据<死磕MySQL系列 九> MySQL统计总数就用count(*),别花里胡哨的<死磕MySQL系列 十…
系列文章 四.S 锁与 X 锁的爱恨情仇<死磕MySQL系列 四> 五.如何选择普通索引和唯一索引<死磕MySQL系列 五> 六.五分钟,让你明白MySQL是怎么选择索引<死磕MySQL系列 六> 七.字符串可以这样加索引,你知吗?<死磕MySQL系列 七> 项目中将MySQL的报错.异常.执行时间长的都打到了钉钉群中,这样有利于平时及时处理.今天要聊的是无法复现的慢查询. 一.为什会出现无法复现的"慢"SQL 在一生挚友redo log…
系列文章 五.如何选择普通索引和唯一索引<死磕MySQL系列 五> 六.五分钟,让你明白MySQL是怎么选择索引<死磕MySQL系列 六> 七.字符串可以这样加索引,你知吗?<死磕MySQL系列 七> 八.无法复现的"慢"SQL<死磕MySQL系列 八> 参与了好几个项目开发,每个项目随着业务量的增大,MySQL数据日益剧增,例如其中一个项目中得用户足迹表,那是非常的疯狂,只怪我大意了,没有闪. 这篇文章我会从delete对性能的影响,以…
有一个问题是这样的统计数据总数用count(*).count(主键ID).count(字段).count(1)那个效率高. 先说结论,不用那么花里胡哨遇到统计总数全部使用count(*). 但是有很多小伙伴就会问为什么呢?本期文章就解决大家的为什么. 系列文章 五分钟,让你明白MySQL是怎么选择索引<死磕MySQL系列 六> 字符串可以这样加索引,你知吗?<死磕MySQL系列 七> 无法复现的"慢"SQL<死磕MySQL系列 八> 什么?还在用de…
在日常开发工作中,你一定会经常遇到要根据指定字段进行排序的需求. 这时,你的SQL语句类似这样. select id,phone,code from evt_sms where phone like '13020%' order by id desc limit 10 这个SQL的逻辑是十分清晰明了,但其内部的执行原理你知多少. 接下来,本期文章将带你打开order by的大门一探究竟. 本期所有结论都基于MySQL8.0.26版本 最新文章 字符串可以这样加索引,你知吗?<死磕MySQL系列…
前段时间有读者提议讲讲索引下推,这期就把这事儿安排上.多余的前言就不赘述了,我们直接开始. 列位坐好! 图注:思维导图 回表操作 对于数据库来说,只要涉及到索引,必然绕不过去回表操作.当然这也是我们今天所讲内容的前调基础. 说到回表,我们需要从索引开始说起.别担心,不会长篇大论,这里只是简单讲下主键索引与普通索引,目的是让大家对回表操作有个认识.如果你对回表操作很熟悉了,那么可以跳过这一段. 这里我们只以 Innodb 存储引擎作为讲解对象. 主键索引 主键索引在底层的数据存储是通过 B+ 树来…
我用过这两种搜索引擎,但也仅仅是用过而已,没有非常深入研究,以下是我的看法 lucene是完全用java实现,而sphinx是支持java api.显然这两者是有差别的,用java实现的意义在于,你可以很方便的用java去扩展它的功能,这一点对于企业用户非常重要.lucene可以实时增删索引,而sphinx只能通过定时任务实现,我不知道现在新版的实现没.反正这个是硬伤,速度再快也决定了它与实时性要求较高的web应用相去甚远.apache基金会的影响很大,导致lucene的企业用户很多. sphi…
目录 Mysql优化(出自官方文档) - 第八篇(索引优化系列) Optimization and Indexes 1 Foreign Key Optimization 2 Column Indexes 3 Column Indexes && Multiple-Column Indexes 4 Comparison of B-Tree and Hash Indexes 5 Use of Index Extensions 6 Invisible Indexes 7 Descending In…
系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强人"锁"难<死磕MySQL系列 三> 四.S 锁与 X 锁的爱恨情仇<死磕MySQL系列 四> 看过前几期文章的伙伴会发现并没有聊过关于索引和事务的知识点,这两个大点再之前的文章中已经写过了. 这里给大家一个传送门点击直接查看哈! 揭开MySQL索引神秘面纱 上来就…