数据库优化

SQL 数据库优化 关于索引

烈酒焚心 提交于 2020-03-07 20:21:18
-------sql数据库优化------ -------索引----- 1.索引的目的:提高查询效率 2.索引分两种 2.1聚集索引(物理),一个表中只能有一个聚集索引 2.2非聚集索引(逻辑),一个表中可以有多个非聚集索引 3.增加索引后,会增加额外的储存空间,同时降低了增加新记录,修改,删除效率 4.只在经常查询的列上建索引,不要建太多索引 ----------语法----------- –增加聚集索引 create clustered index 索引名 on 表名(列名) –删除索引 drop index 表名.索引名 –增加非聚集索引 create nonclustered index 索引名 on 表名(列名) 来源: CSDN 作者: BowenXu11 链接: https://blog.csdn.net/BowenXu11/article/details/104720056

数据库优化方案

感情迁移 提交于 2020-03-06 20:02:31
目录 一、 选择合适的存储引擎: InnoDB 1.1 怎样将现有的 MyISAM 数据库转换为 InnoDB: 1.2 为每一个表分别创建 InnoDB FILE: 二、 保证从内存中读取数据。讲数据保存在内存中 2.1 足够大的 innodb_buffer_pool_size 2.1.1 怎样确定 innodb_buffer_pool_size 足够大。数据是从内存读取而不是硬盘? 2.1.2 server上是否有足够内存用来规划 2.2 数据预热 2.3 不要让数据存到 SWAP 中 三、定期优化重建数据库 四、降低磁盘写入操作 4.1 使用足够大的写入缓存 innodb_log_file_size 4.2 innodb_flush_log_at_trx_commit 4.3 避免双写入缓冲 五、提高磁盘读写速度 六、充分使用索引 6.1 查看现有表结构和索引 6.2 加入必要的索引 6.2.1 比方,优化用户验证表: 6.2.2 使用自己主动加索引的框架或者自己主动拆分表结构的框架 七、分析查询日志和慢查询日志 八、激进的方法。使用内存磁盘 九、用 NOSQL 的方式使用 MYSQL 十、其它 MYSQL 应该是最流行了 WEB 后端数据库。WEB 开发语言近期发展非常快,PHP, Ruby, Python, Java 各有特点,尽管 NOSQL 近期越來越多的被提到

【巨杉数据库SequoiaDB】巨杉Tech | 分布式数据库千亿级超大表优化实践

一个人想着一个人 提交于 2020-03-06 18:09:07
01 引言 随着用户的增长、业务的发展,大型企业用户的业务系统的数据量越来越大,超大数据表的性能问题成为阻碍业务功能实现的一大障碍。其中,流水表作为最常见的一类超大表,是企业级用户经常碰到的性能瓶颈。 本文就以流水类的超大表,探讨基于SequoiaDB巨杉数据库存储的超大表进行的性能调优。SequoiaDB 巨杉数据库,作为新一代 OLTP 的分布式数据库,被广泛使用于海量数据存储与高并发操作场景中。对于海量数据的存储和高并发操作,分布式数据库相较于传统数据库有着天然的优势,合理利用SequoiaDB巨杉数据库多种特性,轻松解决超大表的性能问题。 02 数据存储规划很重要 对于流水类超大表,前期的数据存储规划尤为重要,合理的数据存储规划能有效利用数据库集群硬件资源,提供更高性能、更高效率的数据服务。 集群规模评估与硬件配置搭配 在数据库集群规划伊始,需要通过调研数据库集群支撑应用规模、系统定位和业务长期发展规划进行摸底,用以评估集群规模以及各服务器的CPU、内存、硬盘、网卡的合理搭配。 精准的评估一个数据库集群规模,是一个宏大且复杂的综合工程,需要有的业务需求评估数据加以支持。通常情况下,由于业务需求变化快、业务增长普遍高于预期,小集群规划可以按照业务调研信息的1.5~2倍进行评估,大集群规划可以按1~1.5倍进行评估。 集群规模需要通过业务规模、数据存储规模

优化数据库

谁都会走 提交于 2020-03-05 16:29:44
1、选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。 例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。同样的,如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。 另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOTNULL ,这样在将来执行查询的时候,数据库不用去比较NULL值。 对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。 2、使用连接(JOIN)来代替子查询(Sub-Queries) MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询,如下所示:

数据库limit用法及其优化

ⅰ亾dé卋堺 提交于 2020-03-02 20:37:41
数据库limit用法及其优化 1.语法: *** limit [offset,] rows 一般是用于select语句中用以从结果集中拿出特定的一部分数据。 offset是偏移量,表示我们现在需要的数据是跳过多少行数据之后的,可以忽略;rows表示我们现在要拿多少行数据。 2.栗子: ①select * from mytbl limit 10000,100 上边SQL语句表示从表mytbl中拿数据,跳过10000行之后,拿100行 ②select * from mytbl limit 0,100 表示从表mytbl拿数据,跳过0行之后,拿取100行 ③select * from mytbl limit 100 这条SQL跟②的效果是完全一样的,表示拿前100条数据 ④为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1: mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last 3.用处: 我目前用到的地方是数据库查询分页,比如前台要展示数据库中数据,需要后台实现分页,传入数据要有“页码page”跟“每页数据条数nums”。 对应SQL大概是这样子:select * from mytbl order by id limit (page-1)*nums,nums 4.问题发现:

数据库优化之索引

做~自己de王妃 提交于 2020-03-02 04:36:45
一 、引言 首先我们来思考一下什么是索引?索引的作用是什么?操作系统的文件索引和数据库的索引有什么不同? 什么是索引?对于这个问题我们可以打一个比喻,索引相对于文件的作用,就好比是目录相对于一本书的作用。所以它的作用也就显而易见了,就是为了查找,提高查找效率。是不是感觉不太有用,那再想一想你查字典的时候一页一页的找试一试,买一本最便宜的字典都要含着泪才能翻完。正常查找字典我们一般先找到部首的笔画,然后找到部首,再根据部首找到字,再根据字找到对应的页,这其实就是一个多级索引。所以说计算机科学里面的很多智慧来来自于生活。 接下来就是操作系统的文件索引和数据库的索引的区别了。一般操作系统都有一张索引表,因为一般操作系统的文件是无结构的字节系列,所以操作系统的索引表记录的是数据的逻辑块号和对应的物理块号。而数据库文件是有结构的记录,所以它可以由每一条记录的关键码来和物理块对应。 特别需要注意的是索引键对于的值是磁盘(外存)的物理地址,而不是内存中的逻辑地址。数据库在读取表的时候首先是先读取索引文件(可能数据文件本身就是索引文件,这和不同的实现方式相关, InnoDB 就是这种实现)。然后根据索引表来读取数据。 二 、选择率 要理解利用索引对数据库查询做优化有一点非常重要,就是全表扫描和索引扫描的区别,索引下面的内容非常重要。 对数据库操作影响最大的就是 IO 操作。表的扫描操作就和 IO

【巨杉数据库SequoiaDB】巨杉Tech | 分布式数据库千亿级超大表优化实践

旧时模样 提交于 2020-02-28 17:47:54
01 引言 随着用户的增长、业务的发展,大型企业用户的业务系统的数据量越来越大,超大数据表的性能问题成为阻碍业务功能实现的一大障碍。其中,流水表作为最常见的一类超大表,是企业级用户经常碰到的性能瓶颈。 本文就以流水类的超大表,探讨基于SequoiaDB巨杉数据库存储的超大表进行的性能调优。SequoiaDB 巨杉数据库,作为新一代 OLTP 的分布式数据库,被广泛使用于海量数据存储与高并发操作场景中。对于海量数据的存储和高并发操作,分布式数据库相较于传统数据库有着天然的优势,合理利用SequoiaDB巨杉数据库多种特性,轻松解决超大表的性能问题。 02 数据存储规划很重要 对于流水类超大表,前期的数据存储规划尤为重要,合理的数据存储规划能有效利用数据库集群硬件资源,提供更高性能、更高效率的数据服务。 1. 集群规模评估与硬件配置搭配 在数据库集群规划伊始,需要通过调研数据库集群支撑应用规模、系统定位和业务长期发展规划进行摸底,用以评估集群规模以及各服务器的CPU、内存、硬盘、网卡的合理搭配。 精准的评估一个数据库集群规模,是一个宏大且复杂的综合工程,需要有的业务需求评估数据加以支持。通常情况下,由于业务需求变化快、业务增长普遍高于预期,小集群规划可以按照业务调研信息的1.5~2倍进行评估,大集群规划可以按1~1.5倍进行评估。 集群规模需要通过业务规模、数据存储规模

MySQL之数据库优化

人走茶凉 提交于 2020-02-27 04:39:10
Mysql数据库的优化技术 对mysql优化是一个综合性的技术,主要包括 •表的设计合理化(符合3NF) •添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引] •分表技术(水平分割、垂直分割) •读写[写: update/delete/add]分离 •存储过程 [模块化编程,可以提高速度] •对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ] •mysql服务器硬件升级 •定时的去清除不需要的数据,定时进行碎片整理(MyISAM) 数据库优化工作 对于一个以数据为中心的应用,数据库的好坏直接影响到程序的性能,因此数据库性能至关重要。一般来说,要保证数据库的效率,要做好以下四个方面的工作: ① 数据库设计 ② sql语句优化 ③ 数据库参数配置 ④ 恰当的硬件资源和操作系统 此外,使用适当的存储过程,也能提升性能。 这个顺序也表现了这四个工作对性能影响的大小 数据库表设计 通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中,为了更好地应用三个范式,就必须通俗地理解三个范式(通 俗地理解是够用的理解,并不是最科学最准确的理解): 第一范式:1NF是对属性的原子性约束,要求属性(列)具有原子性,不可再分解;(只要是关系型数据库都满足1NF) 第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;

数据库优化相关思考

痞子三分冷 提交于 2020-02-26 15:49:54
1、客户端定时查询的业务场景,可考虑放到服务器一次性查询出结果后通知给到各个客户度即可。比如每个客户端都有超时显示的语句,消息查看的语句等。 2、在实际开发中,假如碰到跟操作系统和IE版本不兼容的情况下,可以多考虑进行套壳兼容的模式。自己封装实现后提供使用。 3、很多系统涉及到的SQL语句写在代码里面,导致每次增加字段或修改语句,需要同时修改对应的业务服务程序,影响较大,开发和维护成本也大。 4、具体SQL语句复杂的情况下,可能是表设计的不合理导致的,可以根据业务场景进一步优化表结构的一些设置逻辑。从而优化对应的语句。 5、建议使用分页查询逻辑,以及对应的控件来实现。用户无感知的切换到下一页进行显示和处理。 6、其他内容: (1)多个业务功能点,混合在一起,使用同个SQL语句进行书写,导致查询字段多,关联表多。 (2)相同业务功能点,不同医院在查询语句上也会略有区别,导致不断增加字段,维护起来也诸多不便。 建议进行2类改造: (1)针对原因(1),每个SQL语句确认是否有多个业务功能点使用,存在这种情况,需进行拆分,对每个业务功能点,重新梳理查询条件,展现字段,写多个SQL语句。 (2)针对原因(2),对查询类需求需进行以下改造: (a)需寻找C++下类似JAVA中MYBATIS的数据层框架,将语句放到配置文件中进行书写。这样代码不用改变,针对每家医院

MySQL 索引优化

强颜欢笑 提交于 2020-02-21 10:00:30
前言 大家都知道索引对于数据访问的性能有非常关键的作用,都知道索引可以提高数据访问效率。   为什么索引能提高数据访问性能?他会不会有“副作用”?是不是索引创建越多,性能就越好?到底该如何设计索引,才能最大限度的发挥其效能?   这篇文章主要是带着上面这几个问题来做一个简要的分析,同时排除了业务场景所带来的特殊性,请不要纠结业务场景的影响。 索引为什么能提高数据访问性能?   很多人只知道索引能够提高数据库的性能,但并不是特别了解其原理,其实我们可以用一个生活中的示例来理解。   我们让一位不太懂计算机的朋友去图书馆确认一本叫做《MySQL性能调优与架构设计》的书是否在藏,这样对他说:“请帮我借一本计算机类的数据库书籍,是属于 MySQL 数据库范畴的,叫做《MySQL性能调优与架构设计》”。朋友会根据所属类别,前往存放“计算机”书籍区域的书架,然后再寻找“数据库”类存放位置,再找到一堆讲述“MySQL”的书籍,最后可能发现目标在藏(也可能已经借出不在书架上)。   在这个过程中: “计算机”->“数据库”->“MySQL”->“在藏”->《MySQL性能调优与架构设计》其实就是一个“根据索引查找数据”的典型案例,“计算机”->“数据库”->“MySQL”->“在藏” 就是朋友查找书籍的索引。   假设没有这个索引,那查找这本书的过程会变成怎样呢