数据库优化的方法

转载于:https://blog.csdn.net/dingjianmin/article/details/121718822

1、数据库优化概览图

在数据库优化方面,从主到次的顺序:

以SQL优化、索引优化为主,解决慢SQL问题,最大程度地利用好索引 其次从数据库表结构入手、分库与分表,对数据量级进行处理 最大化利用机器配置,比如设置使用机器内存的大小 如果以上三点无法满足需求,那么再考虑硬件方面的问题,比如提升机器配置,再不行就多用几台服务器,这种成本较高,其性价比相对来说是最低的

img

2、软优化:

2.1、查询语句的优化 用EXPLAIN 分析一条查询语句

  • 1.避免索引失效导致的全表扫描

  • 2.SQL语句的规范

  • 3.不要在列上进行运算

  • 4.不使用NOT IN和<>操作

2.2、优化子查询

在MySQL中,尽量使用JOIN来代替子查询.因为子查询需要嵌套查询,嵌套查询时会建立一张临时表,临时表的建立和删除都会有较大的系统开销,而连接查询不会创建临时表,因此效率比嵌套子查询高.

使用连接(JOIN)来代替子查询(Sub-Queries)

2.3、添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引]

索引是提高数据库查询速度最重要的方法之一.

使用短索引

在建有索引的字段上尽量不要使用函数进行操作

应该注意避免在查询中让MySQL进行自动类型转换,因为转换过程也会使索引变得不起作用

索引失效的情况:mysql

  • 1.前导模糊查询不能利用索引(like '%XX'或者like '%XX%')

  • 2.如果是组合索引的话,如果不按照索引的顺序进行查找,比如直接使用第三个位置上的索引而忽略第一二个位置上的索引时,则会进行全表查询,组合索引,多列索引必须满足最左匹配.

  • 3.条件中有or,OR关键字的两个字段必须都是用了索引,该查询才会使用索引

  • 4.索引无法存储null值,所以where的判断条件如果对字段进行了null值判断,将导致数据库放弃索引而进行全表查询.

为什么索引列无法存储Null值?

a.索引是有序的。NULL值进入索引时,无法确定其应该放在哪里。

  • 5.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

  • 6.in 和 not in 也要慎用,否则会导致全表扫描

  • 7.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。

  • 8.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。

2.4、表的设计合理化 符合三大范式(3NF)

1NF、列不可分;

强调的是列的原子性,即列不能够再分成其他几列。

2NF、非主键列完全依赖主键,不存在部分依赖;

一是表必须有一个主键;

二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。

3NF、非主键列必须直接依赖主键,不存在传递依赖。

不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。

分解表

对于字段较多的表,如果某些字段使用频率较低,此时应当,将其分离出来从而形成新的表

中间表

对于将大量连接查询的表可以创建中间表,从而减少在查询时造成的连接耗时

使用联合(UNION)来代替手动创建的临时表

2.5、表字段设置合理

选取最适用的字段属性

MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。

另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOTNULL,这样在将来执行查询的时候,数据库不用去比较NULL值。

数据字典,不存汉字查询

2.6、优化子查询

3、硬优化:

3.1、硬件三件套(cpu,内存,磁盘)

3.2、优化数据库参数

优化数据库参数可以提高资源利用率,从而提高MySQL服务器性能.MySQL服务的配置参数都在my.cnf或my.ini,下面列出性能影响较大的几个参数.

  • key_buffer_size:索引缓冲区大小

  • table_cache:能同时打开表的个数

  • query_cache_size和query_cache_type:前者是查询缓冲区大小,后者是前面参数的开关,0表示不使用缓冲区,1表示使用缓冲区,但可以在查询中使用SQL_NO_CACHE表示不要使用缓冲区,2表示在查询中明确指出使用缓冲区才用缓冲区,即SQL_CACHE.

  • sort_buffer_size:排序缓冲区

3.3、数据库的分库分表

因为数据库压力过大,首先一个问题就是高峰期系统性能可能会降低,因为数据库负载过高对性能会有影响。另外一个,压力过大把你的数据库给搞挂了怎么办?所以此时你必须得对系统做分库分表 + 读写分离,也就是把一个库拆分为多个库,部署在多个数据库服务上,这时作为主库承载写入请求。然后每个主库都挂载至少一个从库,由从库来承载读请求。

设置数据库主从复制状态下的读写分离,主库进行更新操作,从库进行查询操作。

3.4、缓存集群

如果用户量越来越大,此时你可以不停的加机器,比如说系统层面不停加机器,就可以承载更高的并发请求。然后数据库层面如果写入并发越来越高,就扩容加数据库服务器,通过分库分表是可以支持扩容机器的,如果数据库层面的读并发越来越高,就扩容加更多的从库。但是这里有一个很大的问题:数据库其实本身不是用来承载高并发请求的,所以通常来说,数据库单机每秒承载的并发就在几千的数量级,而且数据库使用的机器都是比较高配置,比较昂贵的机器,成本很高。如果你就是简单的不停的加机器,其实是不对的。所以在高并发架构里通常都有缓存这个环节,缓存系统的设计就是为了承载高并发而生。所以单机承载的并发量都在每秒几万,甚至每秒数十万,对高并发的承载能力比数据库系统要高出一到两个数量级。所以你完全可以根据系统的业务特性,对那种写少读多的请求,引入缓存集群。具体来说,就是在写数据库的时候同时写一份数据到缓存集群里,然后用缓存集群来承载大部分的读请求。这样的话,通过缓存集群,就可以用更少的机器资源承载更高的并发。

img

每天努力一点,每天都在进步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是 Oracle 数据库优化的一些常见方法: 1. 确保合理的物理设计:物理设计包括表空间、数据文件、数据文件大小、数据块大小、表和索引等,这些因素会直接影响数据库性能。建议使用自动存储管理(ASM)来管理表空间和数据文件。 2. 优化 SQL 查询:优化 SQL 查询是数据库性能优化的核心,可以通过使用索引、避免全表扫描、优化查询语句等方式来提高查询效率。 3. 使用合适的索引:索引是数据库优化的重要手段之一,使用合适的索引可以提高查询效率。需要根据实际情况选择合适的索引类型,包括单列索引、复合索引、聚簇索引等。 4. 优化数据库参数设置:Oracle 数据库提供了众多的参数,通过合理的参数设置可以提高数据库性能。例如,可以调整数据库缓存的大小、设置 PGA 和 SGA 的大小、调整日志文件大小等。 5. 使用分区表:根据业务需求,将大型表划分为多个分区,可以提高查询效率。可以根据时间、地域等因素进行分区。 6. 监控数据库性能:通过监控数据库性能指标,及时发现并解决问题,可以提高数据库的可用性和稳定性。可以使用 Oracle 自带的性能监控工具,例如 Oracle Enterprise Manager。 7. 数据库升级:及时升级数据库版本,可以获得更好的性能和安全性。但需要谨慎操作,升级前需要做好备份工作,并测试升级过程中是否会出现问题。 总之,Oracle 数据库优化是一个综合性的工作,需要从多个方面入手,逐一解决问题,才能提高数据库性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值