大数据量要关系的数据库设计问题

大数据量数据库操作和设计中的禁区
在操作数据库的使用中,有很多禁区,这些禁区是我们想都不要想,碰都不要碰的,一旦做了这些事情,带来的后果绝对是灾难性的。

1、主外键
主外键在小型应用,或者人数不多,可以控制的范围内绝对是可以使用的,但是一旦数据量大了起来,再使用外键约束会导致性能很差,一般互联网应想都不要去想外键这种东西了,因为这样的话会在读写时花费大量的性能去查询约束,而在请求量大的时候再去查询约束来消耗性能,后果和成本可想而知。
而且不管在测试还是后期数据维护时,你会发现,哎?这个表跟那个表连着呢?我是谁?我在那?我在干什么的哲学三问。

2、游标
这个你就更难为数据库了,因为游标会把整表执行变为行执行,你可以想象一下,一个十万级别或者百万级别的数据库,你让他一行一行的去执行,那好,性能消耗更加恐怖了,你的服务器基本什么事情都不要去做了,CPU和IO全去干这东西去了。

3、触发器
这个东西说真的,不管是谁写的,有时候你想知道触发器改了什么是真的麻烦,而且难以调试,还不好控制,这就要求我们在决定是否使用触发器的时候需要非常谨慎。

4、存储过程
存储过程一时爽,后面你再去改动项目的时候,整个跟他相关的类全部要重写,那感觉,相当的酸爽,不说了,先去哭会。

5、使用DROP和DELETE时
关于这个事情么,你可以参考下从删库到跑路和下面这个链接:
http://www.sohu.com/a/256357612_104421
所以说DROP和DELETE的时候要注意使用的条件和表,最好不要去动生产库,在非动不可时,一定要注意备份,千万注意,要不下一个从删库到跑路的人就是你了。

6、用TRUNCATE替代DELETE:
TRUNCATE是清空一个表内的数据,DELETE是DML操作,truncate是DDL操作;因此,用delete删除整个表的数据时,会产生大量的Rollback,占用很多的Rollback Segments, 而TRUNCATE不会。
在内存中,用delete删除数据,表空间中其被删除数据的表占用的空间还在,便于以后的使用,另外它是“假相”的删除,相当于windows中用delete删除数据是把数据放到回收站中,还可以恢复,当然如果这个时候重新启动系统(OS或者RDBMS),它也就不能恢复了!而用truncate清除数据,内存中表空间中其被删除数据的表占用的空间会被立即释放,相当于Windows中用shift+delete删除数据,不能够恢复!

7、 在查询中尽量不要用的关键字
or、以%开头的like、如果列类型是字符串,没有用引号引用起来、!=负向查询。
因为这几种情况的话是都不会去命中索引的而是去全表扫描,会浪费大量资源和时间。

原文地址:https://www.cnblogs.com/Koaler/p/12075264.html

时间: 2024-10-07 19:29:19

大数据量要关系的数据库设计问题的相关文章

[转]浅析大数据量高并发的数据库优化

链接:http://www.uml.org.cn/sjjm/201308264.asp 高并发数据库可以同时处理海量信息,应用范围很广.今天我们将讨论的是大数据量高并发的数据库优化,希望对大家有所帮助. 一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性

(转)大数据量高并发的数据库优化与sql优化

大数据量高并发的数据库优化 一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而整个系统也不可避免的形成了一个打补丁工程. 所以在考虑整

大数据量高并发的数据库优化详解(MSSQL)

转载自:http://www.jb51.net/article/71041.htm 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 一.数据库结构的设计 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而

大数据量、高并发数据库的高性能、高可用性解决方案

大数据量.高并发数据库的高性能.高可用性解决方案: 1.拆表:大表拆小表(垂直拆,水平拆:分表,分区partition,分片sharding),可以在应用层实现,也可以在数据库层面实现一部分:提高系统性能. 2.分库:把表放到不同的数据库,这也是分布式数据库的基础:提高系统性能. 3.分布式:不同的数据库放到不同的服务器:提高系统性能. 4.集群:使用数据库复制等技术组建集群,实现读写分离.备份等:提高系统性能.可用性. 5.缓存:对常用的数据进行缓存.提高系统性能. 6.备份:主从库,快照,热

大数据量高并发的数据库优化

一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而整个系统也不可避免的形成了一个打补丁工程. 所以在考虑整个系统的流程的时候,我们必须

大数据量高并发的数据库优化(转)

参考:http://www.cnblogs.com/chuncn/archive/2009/04/21/1440233.html 一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时

DB开发之大数据量高并发的数据库优化

一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而整个系统也不可避免的形成了一个打补丁工程. 所以在考虑整个系统的流程的时候,我们必须

大数据量高并发的数据库优化,sql查询优化

一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而整个系统也不可避免的形成了一个打补丁工程. 所以在考虑整个系统的流程的时候,我们必须

采用Kettle分页处理大数据量抽取任务

作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5524614.html 需求: 将Oracle数据库中某张表历史数据导入MySQL的一张表里面. 源表(Oracle):table1 目标表(MySQL):table2 数据量:20,000,000 思路: 由于服务器内存资源有限,所以,无法使用Kettle一次性从源表导入目标表千万级别的数据,考虑采用分页导入的方式来进行数据传输,即: 根据实际情况设置一个每次处理的数据量,比如:5,000条,然后