浅谈对数据库模型进行性能优化

时间:2022-10-24 07:56:33

对数据库模型进行性能优化

好了,借午休之际,让我们来聊聊对数据库模型进行性能优化的问题吧!

在一个数据库应用程序中,程序是从一个健全的数据库模型开始执行的。明白了这一点,我们来看几种可以优化数据库模型的方法,以通过这些方法可以提高查询效率。还等什么,赶快看看吧!

1.    少许的逆规范化(denormalization)大有帮助。不要出现有像名为Gender的表,表中有3个值。另外,如果你有一个一对一关系的表,而且它经常被它的父表访问,那么你就可以考虑合并这两张表。

2.       让应用程序多承担一些责任。如果可以通过应用程序更容易地析取数据,为什么还要生成视图来强制数据以某种确定方式出现呢?

3.       对数据进行水平划分。如果你有一个表示Web站点点击率的表,考虑把它按月份划分为12个表。如果数据时分布式的,那么你的负荷就变成了原有的1/12。这也可以让你把一些数据放在各个独立的服务器上,然后使用分布的划分视图(分区视图)来更新和查看数据。最后一点,这样做使你可以对当前月份使用更加积极的索引策略,并且对已经过去的月份使用更高的填充度。

4.       在行中保持尽可能少的内容。换句话说,就是不要使用一个char(255)类型来存储一个用户名的值,这只会造成空间的浪费。

5.       为了不破坏引用的完整性,要避免使用触发器。使用外健约束要快得多,并且这种约束更适合处理大多数的操作。

6.       避免使用text类型的字段。尝试找出对字段的确切要求是什么。如果你准备最多插入2000个字符,那么使用varchar(2000)会更加有效。

7.      除非你要使用多语言,否则不要使用像nvarcharntext这样的Unicode数据类型。然而,要牢记,当你使用DTS从另一个数据源(如Acess)转换数据的时候,DTS经常在服务器上创建Unicode的列。如果你的公司打算使用多语言,那么你就会需要这些数据类型。

8.      避免在标识列中创建聚集索引。聚集索引对于范围查询执行起来更好,如一个日期。如果在标识列中存在聚集索引,你的数据就有收到“热点”的风险。热点是由于很多人更新同一个数据页引起的。

9.      可能的话,不允许列为NULL。如果你知道你总是会得到地址信息的话,那么你就不需要为空的列。处理NULL会增加额外的开销。

10. 在某些情况下,如果表中存在惟一的数据列,那么要避免使用标识列。例如,如果用户名的值是惟一的,就不要另外创建没有必要的键。这样可以防止从子表中创建不必要的连接来确定用户名。这可能会占用一些存储空间,但可以给你节省大量的查询时间。要灵活处理这种实际情况,如果已经存在惟一的值,那么为什么还有人工去给它分配一个呢?

    好了,先谈到这儿了 ,开始工作了!