数据库性能

Oracle创建索引要做到三个适当

☆樱花仙子☆ 提交于 2020-04-07 12:11:55
在 Oracle 数据库中,创建索引虽然比较简单。但是要合理的创建索引则比较困难了。笔者认为,在创建索引时要做到三个适当,即在适当的表上、适当的列上创建适当数量的索引。虽然这可以通过一句话来概括优化的索引的基本准则,但是要做到这一点的话,需要数据库管理员做出很大的努力。具体的来说,要做到这个三个适当有如下几个要求。   一、 根据表的大小来创建索引。   虽然给表创建索引,可以提高查询的效率。但是数据库管理员需要注意的是,索引也需要一定的开销的。为此并不是说给所有的表都创建索引,那么就可以提高数据库的性能。这个认识是错误的。恰恰相反,如果不管三七二十一,给所有的表都创建了索引,那么其反而会给数据库的性能造成负面的影响。因为此时滥用索引的开销可能已经远远大于由此带来的性能方面的收益。所以笔者认为,数据库管理员首先需要做到,为合适的表来建立索引,而不是为所有的表建立索引。   一般来说,不需要为比较小的表创建索引。如在一个 ERP 系统的数据库中, department 表用来存储企业部门的信息。一般企业的部分也就十几个,最多不会超过一百个。这 100 条记录对于人来说,可能算是比较多了。但是对于计算机来说,这给他塞塞牙缝都还不够。所以,对类似的小表没有必要建立索引。因为即使建立了索引,其性能也不会得到很大的改善。相反索引建立的开销,如维护成本等等,要比这个要大。也就是说

T- SQL性能优化详解 http://www.cnblogs.com/weixing/p/3357519.html

让人想犯罪 __ 提交于 2020-04-03 21:48:14
T- SQL性能优化详解 http://www.cnblogs.com/weixing/p/3357519.html 故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性能表现不错,但随着注册用户的增多,访问速度开始变慢,一些用户开始发来邮件表示抗议,事情变得越来越糟,为了留住用户,你开始着手调查访问变慢的原因。   经过紧张的调查,你发现问题出在数据库上,当应用程序尝试访问/更新数据时,数据库执行得相当慢,再次深入调查数据库后,你发现数据库表增长得很大,有些表甚至有上千万行数据,测试团队开始在生产数据库上测试,发现订单提交过程需要花5分钟时间,但在网站上线前的测试中,提交一次订单只需要2/3秒。   类似这种故事在世界各个角落每天都会上演,几乎每个开发人员在其开发生涯中都会遇到这种事情,我也曾多次遇到这种情况,因此我希望将我解决这种问题的经验和大家分享。   如果你正身处这种项目,逃避不是办法,只有勇敢地去面对现实。首先,我认为你的应用程序中一定没有写数据访问程序,我将在这个系列的文章中介绍如何编写最佳的数据访问程序,以及如何优化现有的数据访问程序。    范围   在正式开始之前,有必要澄清一下本系列文章的写作边界,我想谈的是“事务性(OLTP)SQL Server数据库中的数据访问性能优化”,但文中介绍的这些技巧也可以用于其它数据库平台。  

sql语句性能优化

社会主义新天地 提交于 2020-04-03 21:37:55
面试的时候被面试官问到sql语句的性能优化,回来百度才发现我了解的那些真的是凤毛麟角,废话不多说,上干货: 1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2,应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默 认值。 3,应尽量避免在 where 子句中使用!=或<>操作符, MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE。 4,应尽量避免在 where 子句中使用 or 来连接条件, 否则将导致引擎放弃使用索引而进行全表扫描, 可以 使用UNION合并查询: select id from t where num=10 union all select id from t where num=20 5,in 和 not in 也要慎用,否则会导致全表扫描,对于连续的数值,能用 between 就不要用 in 了:Select id from t where num between 1 and 3 6,下面的查询也将导致全表扫描:select id from t where name like ‘%abc%’ 或者select id from t

Mysql实战45讲----为什么学习mysql

你。 提交于 2020-04-01 12:30:25
  即使是一个开发工程师,也只是 MySQL 的用户,但在了解了一个个系统模块的原理后,再来使用它,感觉是完全不一样的。   当在代码里写下一行数据库命令的时候,就能想到它在数据库端将怎么执行,它的性能是怎么样的,怎样写能让应用程序访问数据库的性能最高。进一步,哪些数据处理让数据库系统来做性能会更好,哪些数据处理在缓存里做性能会更好,心里也会更清楚。在建表和建索引的时候,我也会更有意识地为将来的查询优化做综合考虑,比如确定是否使用递增主键、主键的列怎样选择,等等。   所以需要系统的学习mysql,形成学习网络而不是只知道零散的知识点。可能一个业务开发人员用了两三年 MySQL,还未必清楚那些自己一直在用的“最佳实践”为什么是最佳的。   看完这些需要输出自己的mysql知识网络。    来源: https://www.cnblogs.com/lvzhenhua/p/12610213.html

赶考状元:如何快速应对数据库QPS暴涨20倍?我们做了三次决策

女生的网名这么多〃 提交于 2020-03-26 01:42:29
受疫情影响,全国各学校的开学均被延期。为避免耽误学生的课业,教育部推出了“停课不停学”政策,鼓励师生积极开展线上教学模式。 赶考状元(上海亿山睦教育科技有限公司)为此积极响应政府号召,向湖北全省一年级到高三的学子免费开放教材的同步在线教学课程,后来进一步扩大至全国范围。这一公益活动获得了很大反响,网站用户注册量和浏览量超过平时数倍。 虽然活动从策划到上线总共只有4天时间,赶考网技术团队通过科学决策,及时精密的实施,完成了业务代码改造、架构评估、扩容升级、SQL优化等工作,期间也和UCloud UDB团队紧密合作,在其协助下实现了数据库的架构改造和扩容,很好地承接了QPS暴涨20倍的访问压力,圆满完成技术保障任务。 下面分享一些我们在此过程中的细节和思考,供有快速扩容需要的企业参考。 面临的业务痛点 公司自2005年成立一直专注于K12在线教育,此次疫情公益活动构想阶段,业务侧运用此前超过十年的互联网及线下教育经验,快速设计了有效可行的方案,在不少细节上下了功夫,例如加速审核通道,只需两步即可学习的易用性,面向家长推广的二维码等。 技术团队的任务则是提前预判后台流量的迅猛增长,未雨绸缪设计行之有效的预案,查漏补缺,切实保障活动顺利流畅运行。为此我们细致梳理了现有架构的薄弱点,并相应制定了精准有效的扩容方案。 由于我们原先的扩容是稳定慢节奏的,这次预见到了大量访问需求

Oracle数据库的性能调整

僤鯓⒐⒋嵵緔 提交于 2020-03-24 14:18:05
oracle是一个高性能数据库软件。用户可以通过参数的调整,达到性能的优化。性能优化主要分为两部分:一是数据库管理员通过对系统参数的调整达到优化的目的,二是开发人员通过对应用程序的优化达到调整的目的。   在此,仅就系统参数的调整进行探讨,而不涉及应用程序的优化。对系统参数的调整,可以分为以下几个部分:   (1)调整内存分配   系统全局区(SGA)是一个分配给ORACLE 包含ORACLE 数据库实例控制信息的内存段。SGA的大小对系统性能的影响极大,其缺省参数设置只适用于配置很低的计算机,不适应收入系统现有设备的需要。这些参数若不作调整,会对系统资源造成巨大浪费。就收入系统的Alpha 1200而言,SGA的大小以160兆左右为宜。   初始化参数文件中的一些参数对SGA的大小有决定性的影响。参数DB-BLOCK-BUFFERS(SGA中存储区高速缓存的缓冲区数目),参数SHARED-POOL-SIZE(分配给共享SQL区的字节数),是SGA大小的主要影响者。   DB-BLOCK-BUFFERS参数是SGA大小和数据库性能的最重要的决定因素。该值较高,可以提高系统的命中率,减少I/O。每个缓冲区的大小等于参数DB-BLOCK-SIZE的大小。ORACLE数据库块以字节表示大小。   Oracle SGA区共享池部分由库高速缓存、字典高速缓存及其他一些用户和服务器会话信息组成

支撑日活百万用户的高并发系统,应该如何设计其数据库架构?

北城以北 提交于 2020-03-21 02:58:58
目录: 用一个创业公司的发展作为背景引入 用多台服务器来分库支撑高并发读写 大量分表来保证海量数据下查询性能 读写分离来支撑按需扩容及性能提升 高并发下的数据库架构设计总结 “ 这篇文章,我们来聊一下对于一个支撑日活百万用户的高并系统,他的数据库架构应该如何设计? 看到这个题目,很多人第一反应就是: 分库分表啊! 但是实际上,数据库层面的分库分表到底是用来干什么的,他的不同的作用如何应对不同的场景,我觉得很多同学可能都没搞清楚。 (1)用一个创业公司的发展作为背景引入 假如我们现在是一个小创业公司,注册用户就20万,每天活跃用户就1万,每天单表数据量就1000,然后高峰期每秒钟并发请求最多就10。 天哪!就这种系统,随便找一个有几年工作经验的高级工程师,然后带几个年轻工程师,随便干干都可以做出来。 因为这样的系统,实际上主要就是在前期快速的进行业务功能的开发,搞一个单块系统部署在一台服务器上,然后连接一个数据库就可以了。 接着大家就是不停的在一个工程里填充进去各种业务代码,尽快把公司的业务支撑起来,如下图所示。 结果呢,没想到我们运气这么好,碰上个优秀的CEO带着我们走上了康庄大道! 公司业务发展迅猛,过了几个月,注册用户数达到了2000万!每天活跃用户数100万!每天单表新增数据量达到50万条!高峰期每秒请求量达到1万! 同时公司还顺带着融资了两轮,估值达到了惊人的几亿美金

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是对记录的惟一性约束,要求记录有惟一标识

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

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

猴子都能懂的数据库避坑指南,还说你不会?

老子叫甜甜 提交于 2020-03-06 15:08:39
前言 工作的这些年发现一个比较奇怪的现象就是身边无论是工作十多年的老兵,还是初级刚入行的程序员,在高谈阔论技术和趋势的时候都是人工智能,大数据,区块链,各种框架,语言,算法,AI,BI,CI,DI…… 等等,倒是发现很少有人关注数据库,不知道是因为数据库感觉太低端还是太低调,总是不容易被人提起 技术就是这样,不太关注的地方就不会重视,越是不被重视的地方,掉进坑里的概率就会越大,所以就在这里给大家简单聊聊在使用数据库过程中有哪些防掉坑指南,也可以对刚入行的小朋友有一个提醒的作用,万丈高楼平地起,一定要先打好基础再去考虑上层的建筑,不要舍本逐末 本章主要分以下四个小节(预计读完 5 分钟左右): 数据库为什么重要 数据库有哪些使用技巧 数据库有哪些容易掉进去的坑? 深入学习数据库的建议 数据库为什么重要 很多人在开发过程中不太关注数据库,对于表结构的设计也没什么讲究大多属于“能用就行”,但是根据作者将近十年的开发经验来看的话,只要你是从事 Web 相关领域开发你就无法避免不和数据库打交道, 在Web开发中大多功能操作本质上都是对数据库进行操作 ,不管你用是 Pythod,Java,Ruby 等语言进行 Web 开发,你其实都是在面向数据库进行编程,很多 Web 框架作者为了避免程序员接触数据库的相关知识甚至还封装了一层 ORM (Object Relational Mapping