{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

如何优化数据库?

chavesguchavesgu 回答0 收藏1
问题描述:如何提高数据库的性能?
收藏问题

5条回答

n7then

n7then

回答于2022-06-28 14:45

数据库优化一般考虑到内存,缓冲区,归档等性能方面

评论0 赞同0
  •  加载中...
wuyumin

wuyumin

回答于2022-06-28 14:45

谢邀,在BAT里曾经接手过一个公司级的平台开发,接手的时候,这个平台已经上线2年了,但是却经常收到用户投诉,说从网页端来操作页面的时候,响应实在是太慢了,非常影响用户体验。

接手的时候,经理就说了,一定要把用户反馈的这个事情列为P0级问题,尽快解决。

于是,我马上开始了分析。经过在日志里打点,得知时间主要消耗在数据库查询上。根据我们之前的理论知识,我根本想象不到数据库能被拖慢到这个地步。问题出现在一张存储历史任务的表格实在是太大了,新任务还在以每天百万级的速度增长,而这张表的体量已经达到了亿。这种情况下,就算有索引,在频繁写表(创建任务)的间隙去读表(查任务),其效率也是非常低的。

主从配置

我当时想到的第一个优化方法是配置主从数据库。主从配置的好处有三点,分别是1)读写分离,也有人称之为负载均衡;2)数据异地备份,还有3)提高数据库的可用性。当时配置主从的主要目的是希望能够实现读写分离,从而提高数据库查询的效率。配置过后,查询效率确实有一定的提高,但是还远未达到解决问题的程度。

引入ELASTICSEARCH

在查阅了很多信息之后,我看到了很多人推荐使用elastic search作为持久层。

它是一个轻量型的存储工具,虽然不是关系型数据库,也不支持基本SQL语句,但是它具有能够动态多节点部署,节点掉线后不影响全局数据的优点,最重要的一点,在面对海量数据查询时,它的表现要比MySQL优秀许多。根据我们的实际测试,一张几千万的表格,如果存储在MySQL中,利用非索引字段查询,可能消耗数秒到数十秒,但是同样的数据存储在ElasticSearch中,只需要毫秒级别就能查询到结果。简直就是为我们遇到的问题量身定做的解决方案。


综上,我们从两个方面提供了优化数据库的思路,分别是配置主从与引入ElasticSearch。

以上是我的浅见,欢迎各位在下方评论区点赞留言互动。

我是苏苏思量,来自BAT的java开发程序员,每天分享科技类见闻,欢迎关注我,与我共同进步。

评论0 赞同0
  •  加载中...
XUI

XUI

回答于2022-06-28 14:45

1.最重要的调整数据表的架构,以提升效率。通过架构调整,减少关联查询,减少同步读写。用冗余字段,减少关联。

2 大小字段分离。尤其是大字段,最好独立表存储(当然是数据量极为庞大时)

3.使用链接(join)来代替子查询,速度将会快很多的。

4.合理索引!十分重要,必要时分表分库。好的索引,使查询提升1000倍,不是问题。

评论0 赞同0
  •  加载中...
gggggggbong

gggggggbong

回答于2022-06-28 14:45

直接多PC SERVER搭建机群,把大数据库拆分吧。有钱你就直接上小型机+Oracle数据库

主要是多大的数据库?16台够了吧?MySQL

评论0 赞同0
  •  加载中...
ralap

ralap

回答于2022-06-28 14:45

针对数据库优化基本在有以下的步骤:

一、硬件的优化

1)最粗放的方式就是提升硬件的配置,可以从CPU,内存和磁盘方面给予回答。

二、DBA的优化

1)最常用的方法是索引、索引、索引,加个索引可以将CPU的100%一下子降到10%左右

2)和开发沟通看看表里面的数据是否可以搬移或是删除

三、开发的优化

1)添加缓存,减少对数据库的访问,变相的减少数据库的压力

2)添加冗余字段,减少跨表查询,采用反三范式的方法去设计表

3)SQL语名要规范,不允许用seelct * ,where条件中不允许用函数、like,not in,<>等;

四、架构的优化

1)数据库设计要规范,避免存在大表,如表数据量过大,可以拆分成多个表

2)减少跨表查询,最好使用单表去查询数据

3)设计数据库的时候要采用水平或是垂直拆分的方式,将数据打散。

注:有时候数据库优化不是单靠一个点去完成的,如果想要治本的话,得从多方面去入手。

评论0 赞同0
  •  加载中...

相关问题

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<