数据库优化

mysql优化--避免数据类型的隐式转换

本秂侑毒 提交于 2020-04-15 09:09:49
【推荐阅读】微服务还能火多久?>>> 发现mysql服务器CPU占用率较高,而且从服务器上数据滞后主服务器很长时间。 从slow log文件中找到这样一条sql语句。 这个sql语句query_time达到了48.8秒,一个根据主键去更新的update语句居然耗时这么长。 查看执行计划,发现语句无法使用索引。 检查后发现主键_id字段是varchar类型,而语句中是long类型,发生了隐式类型转换,导致该语句无法使用主键索引,而必须走全表扫描(rows_examined:853805)的时候,全表扫描时是有表锁的(lock_time:46.41)。 在找到这个sql的来源,并修改成传递varchar类型后,再看执行计划,已经可以使用主键索引。 部署到主站后发现服务器CPU使用率下降,从服务器的数据滞后时长也变成了0秒。 数据类型隐式转换的小问题也能造成很大的影响。 来源: oschina 链接: https://my.oschina.net/u/1426212/blog/192205

浅说MySQL优化方法

柔情痞子 提交于 2020-04-05 19:05:07
1.优化思路 在数据库的优化上我们有两个方面,一方面是安全,另一方面则是性能. 安全 ,就是要保证数据的可持续性; 性能,则说的就是数据的高性能访问; 2.优化方法 1)选取最适用的字段属性 一般来说,数据库中的表越小,查询执行的效率越快,因此我们可以在创建表的时候将字段竟可能设定的小一点,这样增加了数据库的空间. 另一个方法则是在可能的情况下,尽量把字段设置为非空,这样查询的时候就不用去比较NULL值,从而提升查询速度 2)使用连接查询代替子查询 使用子查询的话数据库需要在内存中先创建出临时表,然后再把临时表用在另一个查询上,子查询可以一次性完成很多逻辑上多个步骤才能完成的SQL操作,这样查询速度不是很快,而采用连接查询的话,MYSQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作. 3)使用联合来代替手动创建的临时表 使用UNION查询,可以把 需要使用临时表的两条或更多的 SELECT 查询合并的一个查询中。在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效。使用 UNION 来创建查询的时候,我们只需要用 UNION作为关键字把多个 SELECT 语句连接起来就可以了, 要注意的是所有 SELECT 语句中的字段数目要想同 . SELECT * FROM t_address UNION SELECT * FROM t_area; 4

10分钟梳理MySQL核心知识点

被刻印的时光 ゝ 提交于 2020-03-31 04:09:29
今天我们用10分钟,重点梳理一遍以下几方面: 数据库知识点汇总; 数据库事务特性和隔离级别; 详解关系型数据库、索引与锁机制; 数据库调优与最佳实践; 面试考察点及加分项。 一、数据库的不同类型 1.常用的关系型数据库 Oracle:功能强大,主要缺点就是贵 MySQL:互联网行业中最流行的数据库,这不仅仅是因为MySQL的免费。可以说关系数据库场景中你需要的功能,MySQL都能很好的满足,后面详解部分会详细介绍MySQL的一些知识点 MariaDB:是MySQL的分支,由开源社区维护,MariaDB虽然被看作MySQL的替代品,但它在扩展功能、存储引擎上都有非常好的改进 PostgreSQL:也叫PGSQL,PGSQL类似于Oracle的多进程框架,可以支持高并发的应用场景,PG几乎支持所有的SQL标准,支持类型相当丰富。PG更加适合严格的企业应用场景,而MySQL更适合业务逻辑相对简单、数据可靠性要求较低的互联网场景。 2.NoSQL数据库(非关系型数据库) Redis:提供了持久化能力,支持多种数据类型。Redis适用于数据变化快且数据大小可预测的场景。 MongoDB:一个基于分布式文件存储的数据库,将数据存储为一个文档,数据结构由键值对组成。MongoDB比较适合表结构不明确,且数据结构可能不断变化的场景,不适合有事务和复杂查询的场景。 HBase:建立在HDFS

《数据库优化》- MySQL优化

瘦欲@ 提交于 2020-03-29 18:31:23
前言   MySQL作为我们最常用的 关系型数据库 ,在开发中,肯定会遇到数据量比较大的情况,而没有足够的性能作为保障,往往查询会比较慢。下面,我们展开来聊聊MySQL怎么优化的。 一、MySQL性能   1、最大数据量   没有数据量和并发数的数据库性能都是没有灵魂的。   MySQL没有限制 单表最大记录数 ,它取决于操作系统对文件大小的限制。   《阿里巴巴Java开发手册》推荐:单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。   性能由综合因素决定,抛开业务复杂度,影响程度依次是: 硬件配置、MySQL配置、数据表设计、索引优化 。 500万这个值仅供参考,并非铁律。   有位大佬操作过超过4亿行数据的单表,分页查询最新的20条记录耗时0.6秒。   SQL大致是: select field_1,field_2 from table where id < #{prePageMinId} order by id desc limit 20 ;   prePageMinId是上一页数据记录的最小ID。   虽然当时查询速度还凑合,随着数据不断增长,有朝一日必定不堪重负。   分库分表是个周期长而风险高的大活儿,应该尽可能在当前结构上优化,比如升级硬件、迁移历史数据等等,实在没辙了再分。对分库分表感兴趣的同学可以阅读分库分表的基本思想。      2

MySQL数据库优化(二)

别来无恙 提交于 2020-03-15 06:39:08
索引 索引是通过 BTREE 结构进行数据检索的,以平衡二叉树检索的方式缩短数据查询的时间。 索引类型 主键索引(primary),在innodb存储引擎下,由于数据和索引都在ibd文件里存储,所以数据的组织方式是由主键索引的 BTREE 结构,即聚簇索引,如果表没有主键系统会查找一列唯一数据列当主键,如果还没有唯一数据列,系统则虚拟主键索引。在innodb存储引擎下,其他索引都引用主键索引的地址,即非聚簇索引。 mysql> create table t1(id int primary key); #或 mysql> alter table t2 add primary key(id); 普通索引(normal) mysql> create index idx_name on t1(name); 唯一索引(unique) mysql> create table t1(id int unique); 全文索引(full)   由于MySQL默认的全文索引对中文的支持不好,所以通常使用别他工具来实现,比如:sphinx 或 coreseek 查询索引 mysql> show keys from table_name; mysql> show index from table_name; 删除索引 mysql> alter table table_name drop index

MySQL性能优化(一):优化方式

若如初见. 提交于 2020-03-14 12:49:34
原文: MySQL性能优化(一):优化方式 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/vbirdbest/article/details/81047715 一:简介 MySQL性能优化是通过优化各个方面的,不仅仅是优化SQL语句这一方面,而是通过各各方面的优化,每个地方优化一些,这样整体性能就会有明显的提升。 二:优化方式 1. 优化数据库表结构的设计 为什么数据库表的设计会影响性能? 字段的数据类型:不同的数据类型的存储和检索方式不同,对应的性能也不同,所以说要合理的选用字段的数据类型。比如人的年龄用无符号的unsigned tinyint即可,没必要用integer 数据类型的长度:数据库最终要写到磁盘上,所以字段的长度也会影响着磁盘的I/O操作,如果字段的长度很大,那么读取数据也需要更多的I/O, 所以合理的字段长度也能提升数据库的性能。比如用户的手机号11位长度,没必要用255个长度。 表的存储引擎:常用的存储引擎有MyISAM、InnoDB、Memory,不同的存储引擎拥有不同的特性,所以要合理的利用每种存储引擎的长处和优点来提供数据的性能。MyISAM不支持事务,表级锁,但是查询速度快,InnoDB支持事务,行锁。 2. SQL优化

Mysql性能优化

巧了我就是萌 提交于 2020-03-12 03:01:34
1.1 Mysql数据库的优化技术   1、mysql优化是一个综合性的技术,主要包括       1. 表的设计合理化(符合3NF)       2. 添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引]       3. 分表技术(水平分割、垂直分割)       4. 读写[写: update/delete/add]分离       5. 存储过程 [模块化编程,可以提高速度]       6. 对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ]       7. mysql服务器硬件升级       8. 定时的去清除不需要的数据,定时进行碎片整理(MyISAM)   2、要保证数据库的效率,要做好以下四个方面的工作       1. 数据库设计       2. sql语句优化       3. 数据库参数配置       4. 恰当的硬件资源和操作系统       此外,使用适当的存储过程,也能提升性能。       这个顺序也表现了这四个工作对性能影响的大小 1.2 数据库表设计   1、通俗地理解三个范式        第一范式: 1NF是对属性的原子性约束,要求属性(列)具有原子性,不可再分解;(只要是关系型数据库都满足1NF)        第二范式: 2NF是对记录的惟一性约束,要求记录有惟一标识

数据库访问性能优化

自作多情 提交于 2020-03-11 11:31:52
数据库访问性能优化 特别说明: 1、 本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识; 2、 本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也可以参考,但许多观点不适合于KV数据库或内存数据库或者是基于SSD技术的数据库; 3、 本文未深入数据库优化中最核心的执行计划分析技术。 读者对像: 开发人员: 如果你是做数据库开发,那本文的内容非常适合,因为本文是从程序员的角度来谈数据库性能优化。 架构师: 如果你已经是数据库应用的架构师,那本文的知识你应该清楚90%,否则你可能是一个喜欢折腾的架构师。 DBA (数据库管理员): 大型数据库优化的知识非常复杂,本文只是从程序员的角度来谈性能优化,DBA除了需要了解这些知识外,还需要深入数据库的内部体系架构来解决问题。 引言 在网上有很多文章介绍数据库优化知识,但是大部份文章只是对某个一个方面进行说明,而对于我们程序员来说这种介绍并不能很好的掌握优化知识,因为很多介绍只是对一些特定的场景优化的,所以反而有时会产生误导或让程序员感觉不明白其中的奥妙而对数据库优化感觉很神秘。 很多程序员总是问如何学习数据库优化,有没有好的教材之类的问题。在书店也看到了许多数据库优化的专业书籍,但是感觉更多是面向DBA或者是PL/SQL开发方面的知识,个人感觉不太适合普通程序员

Oracle数据库SQL优化的最佳思路

断了今生、忘了曾经 提交于 2020-03-10 10:33:42
如何在 Oracle数据库里写出高质量的SQL语句,如何在Oracle数据库里对有性能问题的SQL做诊断和调整,这是DBA们在ORACLE数据库实践中不可避免的难题。下面就让我们来分析一下拿到一条问题sql后DBA可以如何去开始优化思路。 对于有问题的SQL做SQL优化的具体步骤一般为: 1、查看该SQL语句的执行计划,并结合其资源消耗情况和相关统计信息、Trace文件来分析其执行计划是否合理; 2、通过修正措施(如调整该SQL的执行计划等)来对该SQL做调整以缩短其执行时间,Oracle数据库里SQL优化的终极目标就是要缩短目标SQL语句的执行时间。要达到上述目的,我们通常只有如下三种方法可以选择: 1、降低目标SQL语句的资源消耗; 2、并行执行目标SQL语句; 3、平衡系统的资源消耗。 方法1:降低目标SQL语句的资源消耗”以缩短执行时间,这是DBA们最常用的SQL优化方法。这种方法的核心是要么通过在不更改业务逻辑的情况下改写SQL来降低目标SQL语句的资源消耗,要么不改SQL但通过调整执行计划或相关表的数据来降低目标SQL语句的资源消耗。 方法2:并行执行目标SQL语句”,这实际上是以额外的资源消耗来换取执行时间的缩短,很多情况下使用并行是针对某些SQL的唯一优化手段。 方法3:平衡系统的资源消耗” 可以避免不必要的资源争用所导致的目标SQL语句执行时间的增长

优化杭州某著名电子商务网站高并发千万级大型数据库经验之- 磁盘I/O性能

烂漫一生 提交于 2020-03-09 10:29:42
好久没写博客了,一方面是日常工作繁忙,另外一方面是想更多的时间陪陪家里人,享受春天的美好时光,同时还在写一本 《程序员,你伤不起》 的一本书要由人民邮电出版社出版;公司有2台超级强大的服务器,其中1台服务器是用来备份容灾用的,防止老的服务器发生硬件故障时整个网站系统崩溃,若那样会给公司带来惨重的经济损失;而且这样超级强大的服务器不是今天订货明天就能送货上门的。 大学刚毕业那会喜欢研究数据库技术,那时候觉得数据处理很重要,而且数据库优化更重要,看了很多数据库性能优化方面的资料,平时设计软件系统时也会多关心一下数据库的性能问题。但是一直没遇到专门做数据库优化的DBA工作,就渐渐的放弃了数据库专业发展道理。 不是每个公司都能有专业的数据库DBA工作岗位,也未必请得起专业的高手DBA,就是请了人家也未必来对吧。因为没那样的好环境人的技能是容易走下坡路的当然也就更容易贬值而不是升值。 其实让别人放心来弄公司的核心数据库,放心让你操作公司的核心主机,都需要有一个信任的过程;一方面是需要信任你的为人,另外一方面也能信任你的技能高超;因为有任何错误的操作可能会导致天大的错误,服务器停止运转1个小时的直接经济损失就是1-2万元。而且还要在那么多客户面前丢人现眼。间接的损失更是不可估量的会影响到网站的形象。 判断数据库的瓶颈需要一个过程,需要知道数据库的瓶颈是出在哪里? CPU? 内存? 网络? 磁盘