高性能MySQL
主要分享MySQL的高级知识,包括优化、架构、集群等
麦超
这个作者很懒,什么都没留下…
展开
-
Navicat for MySQL 设置定时任务(事件)
进来开发项目时遇到一个问题,就是每天定时修改数据表中签到的字段。现在我就来记录一下用Navicat for MySQL 来实现定时任务。1、启动Navicat for MySQL,新建数据库连接,打开数据库,可能有点啰嗦。2、新建一个函数 ,取名为update_qiandao ,内容为 UPDATE week7_user SET isqiandao = 03、参照上图,新建一个事原创 2015-05-24 12:53:15 · 56558 阅读 · 12 评论 -
MySQL触发器
1、触发器的概念 触发器(trigger)是MySQL提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。——百度百科上面是百度给的触发器的概念,我理解的触发器的概念,就是你执行一条sql语句,这条sql语句的原创 2016-11-17 10:58:09 · 1025 阅读 · 0 评论 -
MySQL存储过程
1、存储过程的概念 在一些语言中,如pascal,有一个概念叫“过程”procedure,和“函数”function,在php中,没有过程,只有函数。过程:封装了若干条语句,调用时,这些封装体执行 函数:是一个有返回值的“过程” 总结:过程是一个没有返回值的函数在MySQL中: 我们把若干条sql封装起来,起个名字 —— 过程 把此过程存储在数据库中 —— 存储过程2、创建存储过程cr原创 2016-11-19 13:57:07 · 1459 阅读 · 0 评论 -
MySQL游标
1、游标的概念(Cursor) 一条sql,对应N条资源,取出资源的接口,就是游标,沿着游标,可以一次取出1行。如果开发过安卓的同学应该知道有一个Api是Cursor,也是读取SQLite数据库用的,和这个有点类似。2、使用游标的步骤(1)声明使用declare进行声明declare 游标名 cursor for select_statement(2)打开游标使用open进行打开open 游标原创 2016-11-20 10:43:07 · 1498 阅读 · 0 评论 -
MySQL用户与权限的管理
用户连接到MySQL,可以做各种查询,这都是MySQL用户与权限功能在背后维持着操作。用户与数据库服务器交互数据,分为两个阶段: (1)你有没有权连接上来 (2)你有没有权执行本操作1、你有没有权连接上来服务器如何判断用户有没有权连接上来?依据:1)你从哪里来?host 2)你是谁?user 3)你的密码是多少?password用户的这三个信息,存储在mysql库中的user表中。修改ho原创 2016-11-20 16:37:11 · 781 阅读 · 0 评论 -
使用MySQLAdmin工具查看QPS
代码:./bin/mysqladmin -r -i 1 -uroot -p1234 ext| awk '/Queries/{printf("QPS:%d\n",$4)}/Threads_connected/{printf("Threads_connected:%d\n",$4)}/Threads_running/{printf("Threads_running:%d\n",$4)}'执行结果:参考文翻译 2017-05-26 15:48:27 · 2704 阅读 · 0 评论 -
exists子查询真的就比连接查询慢吗?
问题前面有篇文章in型子查询的陷阱,里面给出的案例体现的是in型子查询的效果比连接查询慢,今天我们来看看另一个例子,来看看exist子查询真的就比连接查询慢吗?案例商品表:goods 栏目表:category 查询出包含商品的栏目。连接查询select category.cat_id,cat_name from category inner join goods on category.cat_原创 2017-05-27 21:14:48 · 2483 阅读 · 0 评论 -
MySQL主从复制(读写分离)
主从复制/读写分离假设有4台数据库服务器需要做集群,我们可以将其中1台做主服务器,然后剩下的3台做从服务器,从服务器负责从主服务器复制数据,所以叫做主从复制。在业务层面,如果有读取操作,我们可以从3台从服务器中读取,如果是更新操作,我们指定操作主服务器,那么对于主服务器的更改就会复制到3台从服务器上,保证了读取的可靠性,这就是读写分离。实现原理1、主服务器凡运行语句,都产生一个二进制日志 bin-l原创 2017-05-28 22:15:34 · 543 阅读 · 0 评论 -
in 型子查询引出的陷阱
在开发商城的时候,核心有一个goods表和category表,category中有多级分类。假设有一个父分类为6,这个父分类中没有商品,商品都在子分类中,那么要查询分类为6的商品,如果我们使用in型子查询,会使用下面的sql。select * from goods where cat_id in (selectcat_id from category where parent_id=6);直观的原创 2017-03-20 15:56:38 · 1438 阅读 · 0 评论 -
explain详解
(1)idid:代表select 语句的编号, 如果是连接查询,表之间是平等关系, select 编号都是1,从1开始. 如果某select中有子查询,则编号递增.(2)select_typeselect_type: 查询类型(3)tabletable: 查询针对的表有可能是实际的表名 如select * from t1;也有可能是表的别名如 select * from t2 as tmp; d原创 2017-03-20 09:25:15 · 565 阅读 · 0 评论 -
重复索引与冗余索引
重复索引:表示一个列或者顺序相同的几个列上建立的多个索引。 冗余索引:两个索引所覆盖的列重叠冗余索引在一些特殊的场景下使用到了索引覆盖,所以比较快。场景比如文章与标签表 +——+——-+——+ | id | artid | tag | +——+——-+——+ | 1 | 1 | PHP | | 2 | 1 | Linux | | 3 |原创 2017-03-16 20:28:11 · 7027 阅读 · 1 评论 -
索引对排序的影响
索引不仅能提高查询速度,还可以添加排序速度,如果order by 后面的语句用到了索引,那么将会提高排序的速度。测试1、创建测试表:t15表CREATE TABLE `t15` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `cat_id` int(10) unsigned NOT NULL DEFAULT '0', `price` d原创 2017-03-16 19:47:19 · 11762 阅读 · 0 评论 -
高效的索引
如何建立理想的索引?查询频繁度区分度索引长度覆盖字段区分度假设100万用户,性别基本上男/女各为50W, 区分度就低。长度小索引长度直接影响索引文件的大小,影响增删改的速度,并间接影响查询速度(占用内存多).区分度高,长度小问题:如果让区分度高,而长度小?答:可以针对列中的值,从左往右截取部分,来建索引(1)截的越短, 重复度越高,区分度越小, 索引效果越不好 (2)截的越长, 重复度越原创 2017-03-15 10:49:09 · 1919 阅读 · 0 评论 -
索引覆盖
索引覆盖如果查询的列恰好是索引的一部分,那么查询只需要在索引文件上进行,不需要回行到磁盘再找数据。这种查询速度非常快,称为“索引覆盖”。假设有一张t15表,在表中建立了一个联合索引:cp(cat_id,price)当我们使用下面的sql语句,会出现索引覆盖的情况。不信我们可以来查看一下,这里的Extra中显示了Using index,表示这条sql语句刚好用到了索引覆盖。select price f原创 2017-03-15 10:00:24 · 1393 阅读 · 0 评论 -
聚簇索引的页分裂
在MySQL中,MyISAM采用的是非聚簇索引的,InnoDB存储引擎是采用聚簇索引的。聚簇结构的特点:根据主键查询条目时,不用回行(数据就在主键节点下)如果碰到不规则数据插入时,造成频繁的页分裂为什么会产生页分裂?这是因为聚簇索引采用的是平衡二叉树算法,而且每个节点都保存了该主键所对应行的数据,假设插入数据的主键是自增长的,那么根据二叉树算法会很快的把该数据添加到某个节点下,而其他的节点不用原创 2017-03-13 19:15:36 · 9126 阅读 · 6 评论 -
聚簇索引和非聚簇索引
InnoDB的主索引文件上,直接存放该行数据,称为聚簇索引,次索引指向对主键的引用 MyISAM中,主索引和次索引,都指向物理行(磁盘位置).InnoDBMyISAMInnoDB注意点1: 主键索引既存储索引值,又在叶子中存储行的数据 2: 如果没有主键(primary key), 则会Unique key做主键 3: 如果没有unique,则系统生成一个内部的rowid做主键.原创 2017-03-14 22:46:24 · 567 阅读 · 0 评论 -
btree索引生效原则
btree索引的常见误区错误1现在有一个商品表,有cat_id类别字段,price价格字段。假设我们给cat_id和price分别加上各自的所有,那么当我们使用sql:select * from goods where cat_id = 3 and price > 100;//查询第3个栏目,100元以上的商品这句sql只能用上cat_id或price索引,因为它们两是独立的索引,同时只能用上1原创 2017-03-14 21:28:32 · 1659 阅读 · 0 评论 -
索引策略(索引方法)
玩过Navicat for MySQL的都应该知道这张图,这里的索引方法指的就是索引的策略。主要有两种方式,一种是Btree,一种是Hash。B-tree索引注: 名叫btree索引,大的方面看,都用的平衡树,但具体的实现上, 各存储引擎稍有不同,比如,严格的说,NDB引擎,使用的是T-tree Myisam,innodb中,默认用B-tree索引,B-tree的理论查询时间复杂度为O(log原创 2017-03-14 20:23:19 · 1395 阅读 · 0 评论 -
数据库表结构设计的优化
在设计数据库结构的时候,要分别对表和字段进行相应的优化设计。当然还有其他的方面,其他的方面的优化知识可以去看看我的博文中Mysql分类的文章。表方面核心字段且常用字段,应该建立建立成定长,比如说int ,char等定长,并且这些定长的字段放在一张表中,这种表又称为Fixed Format,固定格式。常用字段和不常用字段要分离。需要结合网站具体的业务来分析,分析字段的查询场景,查询频度低的字段,单原创 2017-03-14 19:49:58 · 1715 阅读 · 0 评论