数据库性能

MySQL 优化实施方案

旧时模样 提交于 2019-11-26 22:30:32
1.1 前言   在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行而已。更多关于MySQL查询相关参照: http://www.cnblogs.com/clsn/p/8038964.html#_label6 系列文章。 图 - MySQL查询过程 1.2 优化的哲学 优化有风险,涉足需谨慎 1.2.1 优化可能带来的问题 优化不总是对一个单纯的环境进行,还很可能是一个复杂的已投产的系统。 优化手段本来就有很大的风险,只不过你没能力意识到和预见到! 任何的技术可以解决一个问题,但必然存在带来一个问题的风险! 对于优化来说解决问题而带来的问题,控制在可接受的范围内才是有成果。 保持现状或出现更差的情况都是失败! 1.2.2 优化的需求 稳定性和业务可持续性,通常比性能更重要! 优化不可避免涉及到变更,变更就有风险! 优化使性能变好,维持和变差是等概率事件! 切记优化,应该是各部门协同,共同参与的工作,任何单一部门都不能对数据库进行优化! 所以优化工作,是由业务需要驱使的!!! 1.2.3 优化由谁参与   在进行数据库优化时,应由数据库管理员、业务部门代表、应用程序架构师、应用程序设计人员、应用程序开发人员、硬件及系统管理员、存储管理员等,业务相关人员共同参与。 1.3 优化思路 1

MySQL 规范

微笑、不失礼 提交于 2019-11-26 17:34:21
文章目录 数据库命令规范 数据库基本设计规范 数据库字段设计规范 索引设计规范 常见索引列建议 如何选择索引列的顺序 避免建立冗余索引和重复索引 优先考虑覆盖索引 索引SET规范 数据库SQL开发规范 数据库操作行为规范 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期(时间戳)为后缀 所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换,会造成列上的索引失效,导致查询效率降低) 数据库基本设计规范 1、所有表必须使用Innodb存储引擎 没有特殊要求(即Innodb无法满足的功能如:列存储,存储空间数据等)的情况下,所有表必须使用Innodb存储引擎(mysql5.5之前默认使用Myisam,5.6以后默认的为Innodb)Innodb 支持事务,支持行级锁,更好的恢复性,高并发下性能更好 2、数据库和表的字符集统一使用UTF8MB4 兼容性更好,统一字符集可以避免由于字符集转换产生的乱码,不同的字符集进行比较前需要进行转换会造成索引失效 3、所有表和字段都需要添加注释

SQL性能优化(efficacious )

跟風遠走 提交于 2019-11-26 12:46:55
1、优化目标 减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段。 降低 CPU 计算 除了 IO 瓶颈之外,SQL优化中需要考虑的就是 CPU 运算量的优化了。order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算)。当我们的 IO 优化做到一定阶段之后,降低 CPU 计算也就成为了我们 SQL 优化的重要目标 2、优化方法 一、改变 SQL 执行计划 明确了优化目标之后,我们需要确定达到我们目标的方法。对于 SQL 语句来说,达到上述2个目标的方法其实只有一个,那就是 改变 SQL 的执行计划,让他尽量“少走弯路”,尽量通过各种“捷径”来找到我们需要的数据 ,以达到 “ 减少 IO 次数 ” 和 “ 降低 CPU 计算 ” 的目标 常见误区 (1)count(1)和count(primary_key) 优于 count(*) X 很多人为了统计记录条数,就使用 count(1) 和 count(primary_key) 而不是 count(*) ,他们认为这样性能更好,其实这是一个误区。对于有些场景,这样做可能性能会更差

SQL语句书写技巧

我与影子孤独终老i 提交于 2019-11-26 11:28:40
SQL结构化查询字符串的改写,是实现数据库查询性能提升的最现实.最有效的手段,有时甚至是唯一的手段, 比如在不允许大幅度修改现有数据库结构的情况下。 通过优化SQL语句提高查询性能的关键是: ? 根据实际需求情况,建立合适的索引; ? 使用一切可能的方式去利用好索引,避免全表扫描; ? 尽量减少内存及数据I/O方面的开销 一. 建立索引 (一)建立"适当"的索引,是快速查询的基础。 索引( index )是除表之外另一重要的.用户定义的存储在物理介质上的数据结构。当根据索引码的值搜索数据 时,索引提供了对数据的快速访问。事实上,没有索引,数据库也能根据SELECT语句成功地检索到结果,但随 着表变得越来越大,使用"适当"的索引的效果就越来越明显。注意,在这句话中,我们用了"适当"这个词, 这是因为,如果使用索引时不认真考虑其实现过程,索引既可以提高也会破坏数据库的工作性能。 索引实际上是一种特殊的目录,SQL SERVER提供了两种索引: ? 聚集索引( clustered index ,也称聚类索引.簇集索引) 我们把这种正文内容本身就是一种按照一定规则排列的目录称为"聚集索引"。 例如: 汉语字典中按拼音查某一个字,就是使用"聚集索引",实际上,你根本用不着查目录,直接在字典正文里找, 就能很快找到需要的汉字(假设你知道发音)。 ? 非聚集索引(non clustered