数据库读书笔记
读完某一作品后,相信大家的视野一定开拓了不少,记录下来很重要哦,一起来写一篇读书笔记吧。那么你会写读书笔记吗?下面是收集整理的数据库读书笔记,欢迎阅读,希望大家能够喜欢。
一、存储优化
物化视*——物化视*是包括一个查询结果的数据库对象(可由系统定期刷新其中的数据),物化视*不是在使用时才读取,而是预先计算并保存表连接或聚集等耗时较多的操作结果,这样在查询时大大提高读取速度,特别适用于多个数据量较大的表进行连接操作及分布式数据库中需要进行分布在多个站点的表进行连接操作时使用。
物化视*可以进行远程数据的本地复制,此时物化视*的存储也可以成为快照。主要用于实施数据库间的同步。
物化视*对于数据库客户端的使用者来说如同一个实际表,具有和表相同的一般select操作,而其实际上是一个视*,一个定期刷新的数据视*。物化视*的刷新可采用自动刷新和人工刷新两种方式,具体刷新方式和刷新时间在定义物化视*的时候可以定义。使用物化视*可以实现视*的所有功能,因物化视*不是在使用时才读取,而大大提高了读取速度,特别使用抽取大量数据表中某些信息以及分布式环境中跨节点进行多表数据连接的场合。
聚集
二、查询优化
在数据库运行初期,数据库对SQL语句各种写法的性能优劣还不敏感,但是随着数据库正式使用,数据库中的数据不断增加,劣质SQL语句和好的SQL语句之间的速度差异就逐渐显示出来。
合理使用索引
避免和简化排序:通常在运行order by和group by的SQL语句值,会涉及到排序操作,应当简化成避免对大型表进行重复排序,因为磁盘排序的开销是很大的。与内存排序相比,磁盘排序操作很慢,从而会花费很长时间,降低数据库性能,而且磁盘排序会消耗临时表空间中的资源。
当能够利用索引自动以适当的次序产生输出时,优化器就可以避免不必要的排序步骤,以下是一些影响因素:
(1)由于现有索引的不足,导致排序时索引中不包括一个或几个待排序的列;
(2)group by或order by子句中列的次序与索引的次序不一样;
(3)排序的列来源于不同的表。
为了避免不必要的排序,就要正确建立索引,合理地合并数据表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的`)。如果排序不可避免,那么应当试*简化它,如缩小排序的范围等。
消除对大型表数据的顺序存取:嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响。避免这种情况的主要方法就是对连接的列进行索引。还可以使用并集来避免顺序存取,尽管在所有的检查列上都有索引,但某些形式的where子句强迫优化器使用顺序存取。
避免复杂的正则表达式——在使用正则表达式进行条件查询时可能消耗较多的CPU资源进行字符匹配工作。
使用临时表加速查询——把表的一个子集进行排序并创建临时表,有时候能加速查询。它有助于多重排序操作,且在其他方面还能简化优化器的工作。临时表中行比主表中的行要少,而且顺序就是所要的顺序,减少了磁盘的I/O操作,所以查询工作量可以得到大幅减少。
用排序来取代顺序磁盘存取
不充分的连接条件——左(右)连接消耗的资源非常之多,因为它们包含于null数据匹配。比内连接消耗更多的资源。
存储过程——平时每次向数据库发送SQL脚本,都需要先编译后执行。
不要随意使用游标
事务处理
SQL server性能工具
一、SQL SERVE Rprofiler——监视SQL server事件的工具,监视结果保存在跟踪文件中。
二、数据库引擎优化顾问:分析数据库的工作负荷和物理架构。