文章分类 -  MYSQL_OPTIMIZE

摘要:在面试的环节中,面试官问到:你是如何设计你的表结构的,画一下E-R图?接着又继续深挖,如果有慢查询,你是如何优化你的sql的? 今天,我就来和大家讲讲要怎么回答这道问题。首先,我们要稳住不要慌,自己是自己亲手做的项目,第一个问题应该都不大,第二个问题就需要在面试之前做好充分的准备啦… 在回答问题之前 阅读全文
posted @ 2019-11-04 07:27 luckc# 阅读(262) 评论(0) 推荐(0)
摘要:第1章 引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。通过数据切分来提高网站性能,横向扩展数据层已经成为架构研发人员首选的方式。 水平切分数据库:可以降 阅读全文
posted @ 2017-04-20 21:33 luckc# 阅读(342) 评论(0) 推荐(0)
摘要:公司数据中心从托管机房迁移到阿里云,需要对mysql迁移(Replication)后的数据一致性进行校验,但又不能对生产环境使用造成影响,pt-table-checksum 成为了绝佳也是唯一的检查工具。 pt-table-checksum 是 Percona-Toolkit 的组件之一,用于检测M 阅读全文
posted @ 2017-04-19 19:34 luckc# 阅读(1183) 评论(0) 推荐(0)
摘要:MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道一般的应用系 阅读全文
posted @ 2017-02-28 11:16 luckc# 阅读(297) 评论(0) 推荐(1)
摘要:对于多数应用来说,MySQL都是作为最关键的数据存储中心的,所以,如何让MySQL提供HA服务,是我们不得不面对的一个问题。当master当机的时候,我们如何保证数据尽可能的不丢失,如何保证快速的获知master当机并进行相应的故障转移处理,都是需要我们好好思考的。这里,笔者将结合这段时间做的MyS 阅读全文
posted @ 2017-01-22 09:21 luckc# 阅读(243) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2017-01-12 11:12 luckc# 阅读(1) 评论(0) 推荐(0)
摘要:一、MySQL-Proxy基础MySQL Proxy是一个处于你的Client端和MySQL server端之间的简单程序,它可以监测、分析或改变它们的通信。它使用灵活,没有限制,常见的用途包括:负载平衡,故障、查询分析,查询过滤和修改等等。(Figure1:MySQL Proxy)MySQL-Pr... 阅读全文
posted @ 2014-10-27 11:43 luckc# 阅读(174) 评论(0) 推荐(0)
摘要:MySQL-Proxy,6月份发布的MySQL-Proxy是处在你的MySQL数据库客户和服务端之间的程序,它还支持嵌入性脚本语言Lua。这个代理可以用来分析、监控和变换(transform)通信数据,它支持非常广泛的使用场景:负载平衡和故障转移处理查询分析和日志SQL宏(SQL macros)查询... 阅读全文
posted @ 2014-10-27 11:42 luckc# 阅读(240) 评论(0) 推荐(0)
摘要:温习《高性能MySQL》的复制篇.1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。请注意 阅读全文
posted @ 2012-08-02 14:21 luckc# 阅读(220) 评论(0) 推荐(0)
摘要:在MySQL中的ORDER BY有两种排序实现方式:1.利用有序索引获取有序数据 取出满足过滤条件作为排序条件的字段,以及可以直接定位到行数据的行指针信息,在 Sort Buffer 中进行实际的排序操作,然后利用排好序的数据根据行指针信息返回表中取得客户端请求的其他字段的数据,再返回给客户端.1.1 按照索引对结果进行排序:order by 使用索引是有条件1)只包括在有选择的此列上(select后面的字段),不一定适应*的情况):CREATE TABLE `test` ( `id` int(11) NOT NULLAUTO_INCREMENT, `rdate` datetime NOT N 阅读全文
posted @ 2012-08-02 14:09 luckc# 阅读(992) 评论(0) 推荐(0)
摘要:1.数据库的对象: 1)选择表合适存储引擎:MyISAM: 应用时以读和插入操作为主,只有少量的更新和删除,并且对事务的完整性,并发性要求不是很高的. Innodb: 事务处理,以及并发条件下要求数据的一致性。除了插入和查询外,包括很多的更新和删除。(Innodb有效地降低删除和更新导致的锁定) Memory:数据保存在RAM,快速访问数据。要求表不能太大或者对mysql异常终止后不用恢复数据的 Merge: 2)优化表的数据类型,选择合适的数据类型: 原则:更小通常更好,简单就好,所有字段都得有默认值,尽量避免null: 例如: 数据库表设计时候更小的占磁盘空间尽可能使用更小的整数类型.(m 阅读全文
posted @ 2012-08-02 14:06 luckc# 阅读(361) 评论(0) 推荐(1)
摘要:今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库。希望下面的这些优化技巧对你有用。1. 为查询缓存优化你的查询大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后 阅读全文
posted @ 2012-06-20 12:56 luckc# 阅读(241) 评论(0) 推荐(0)
摘要:在日常工作中,当我们遇到海量数据时,如何从中挑选出自己想要的数据呢?是盲目的查找,还是寻求新的解决方案亦或是通过技巧来获取?开发者在设计一个数据表单时,往往会遵循三条常用形式,他们认为常规模式是设计的唯一途径。然而由于开发者一开始就抱有这种心态,使数据表单设计变得墨守成规,阻碍了它的创新。作者Shivprasad从平时的工作项目中积累了一些经验,向我们介绍了11款制作数据表单技巧,当设计到数据表单制作时,不妨以此来参考,以丰富我们的应用经验。Rule 1:弄清(OLTP或OLAP)应用的本质是什么?当开始制作数据表单设计时,首先,要分析你设计的这个程序的本质是什么?是事务性还是分析性的?你会发 阅读全文
posted @ 2012-04-12 09:17 luckc# 阅读(185) 评论(0) 推荐(0)
摘要:这篇文章主要是带着上面这几个问题来做一个简要的分析,同时排除了业务场景所带来的特殊性,请不要纠结业务场景的影响。索引为什么能提高数据访问性能?很多人只知道索引能够提高数据库的性能,但并不是特别了解其原理,其实我们可以用一个生活中的示例来理解。我们让一位不太懂计算机的朋友去图书馆确认一本叫做《MySQL性能调优与架构设计》的书是否在藏,这样对他说:“请帮我借一本计算机类的数据库书籍,是属于 MySQL 数据库范畴的,叫做《MySQL性能调优与架构设计》”。朋友会根据所属类别,前往存放“计算机”书籍区域的书架,然后再寻找“数据库”类存放位置,再找到一堆讲述“MySQL”的书籍,最后可能发现目标在藏 阅读全文
posted @ 2012-04-03 14:08 luckc# 阅读(159) 评论(0) 推荐(0)
摘要:优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段。降低 CPU 计算除了 IO 瓶颈之外,SQL优化中需要考虑的就是 CPU 运算量的优化了。order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算)。当我们的 IO 优化做到一定阶段之后,降低 CPU 计算也就成为了我们 SQL 优化的重要目标优化方法改变 SQL 执行计划明确了优化目 阅读全文
posted @ 2012-04-03 14:07 luckc# 阅读(211) 评论(0) 推荐(0)
摘要:这是MySQL数据库性能优化专题系列的第一篇文章:MySQL 数据库性能优化之缓存参数优化数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作。而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级。所以,要优化数据库,首先第一步需要优化的就是 IO,尽可能将磁盘IO转化为内存IO。本文先从 MySQL 数据库IO相关参数(缓存参数)的角度来看看可以通过哪些参数进行IO优化:query_cache_size/query_cache_type (global)Query cache 作用于整个 MySQL Instan 阅读全文
posted @ 2012-04-03 13:54 luckc# 阅读(191) 评论(0) 推荐(0)
摘要:顾名思义,MySQL Query Cache 就是用来缓存和 Query 相关的数据的。具体来说,Query Cache 缓存了我们客户端提交给 MySQL 的 SELECT 语句以及该语句的结果集。大概来讲,就是将 SELECT 语句和语句的结果做了一个 HASH 映射关系然后保存在一定的内存区域中。在大部分的 MySQL 分发版本中,Query Cache 功能默认都是打开的,我们可以通过调整 MySQL Server 的参数选项打开该功能。主要由以下5个参数构成:query_cache_limit:允许 Cache 的单条 Query 结果集的最大容量,默认是1MB,超过此参数设置的 Q 阅读全文
posted @ 2012-04-03 13:52 luckc# 阅读(90) 评论(0) 推荐(0)
摘要:很多人都将数据库设计范式作为数据库表结构设计“圣经”,认为只要按照这个范式需求设计,就能让设计出来的表结构足够优化,既能保证性能优异同时还能满足扩展性要求。殊不知,在N年前被奉为“圣经”的数据库设计3范式早就已经不完全适用了。这里我整理了一些比较常见的数据库表结构设计方面的优化技巧,希望对大家有用。由于MySQL数据库是基于行(Row)存储的数据库,而数据库操作 IO 的时候是以 page(block)的方式,也就是说,如果我们每条记录所占用的空间量减小,就会使每个page中可存放的数据行数增大,那么每次 IO 可访问的行数也就增多了。反过来说,处理相同行数的数据,需要访问的 page 就会减 阅读全文
posted @ 2012-04-03 13:52 luckc# 阅读(152) 评论(0) 推荐(0)
摘要:总的来说,在 MySQL 中的ORDER BY有两种排序实现方式,一种是利用有序索引获取有序数据,另一种则是通过相应的排序算法,将取得的数据在内存中进行排序。下面将通过实例分析两种排序实现方式及实现图解:假设有 Table A 和 B 两个表结构分别如下:sky@localhost:example01:48:21>showcreatetableA\G***************************1.row***************************Table:ACreateTable:CREATETABLE`A`(`c1`int(11)NOTNULLdefaul 阅读全文
posted @ 2012-04-03 13:49 luckc# 阅读(300) 评论(0) 推荐(0)
摘要:索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。假设我们创建了一个名为people的表:CREATE TABLE people ( peopleid SMALLINT NOT NULL, name CHAR(50) NOT NULL );然后,我们完全随机 阅读全文
posted @ 2012-03-26 10:24 luckc# 阅读(140) 评论(0) 推荐(0)