如何加快数据库读取
数据库优化
组长:赵林雁 组员:葛子楠 段仪 雷虹
查询速度慢的原因
1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成了瓶颈效应。 3、没有创建计算列导致查询不优化。 4、内存不足 5、网络速度慢 6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。 9、返回了不必要的行和列 10、查询语句不好,没有优化
其他:
1、升级硬件--网络数据库系统由于是针对多 用户并行设计的,需要消耗的内存资源很大。 一般情况下首先应该考虑是不是由于硬件配 置太低而引起的问题。 2、提高网速--数据交换速度 3、扩大服务器的内存--数据交流 4、增加服务器CPU个数--数据处理速度 5、对于大的数据库不要设置数据库自动增长, 它会降低服务器的性能 尽量将数据的处理工作放在服务器上,减少 网络的开销 。
索引
定义:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数 据库表中的特定信息。
优点: 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二,可以大大加快数据的检索速度。 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的 时间。 第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
优化方式:
编程优化 外部优化 索引 切表
编程优化
减少多余数据或者操作
1、避免过多的变量,如果可以,最 好多次使用一个变量。 2、及时结束对象。 tween在某些时候比IN速度更快,Between能够更快地根据索引找 到范围。
select * from chineseresume where title in ('男','女') Select * from chineseresume where between '男' and '女' 是一样 的。 由于in会在比较多次,所以会减慢速度。
缺点: 第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物 理空间。 第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降 低了数据的维护速度。
切表
一、分类:纵向、横向 1.纵向: 定义:按类别截取相应数据,单条记录不完整。 2.横向: 定义:把记录分到不同表中,记录保持完整 横向切表典型用法:每个用户的用户数据一般都比较庞大,但是每个用户数据之间的关 系不大。
二、切表优点缺点 优点:横向:有效降低表的大小,减少由于加锁导致的等待 纵向:字段较多时使用能加速查询时间。 缺点:1.查询会变复杂,尤其是需要排序的查询
2.会破坏原始表的完整性,如果该表的统计操作较多,则不适用.
谢谢大家
2、一般在GROUP BY 个HAVING字句之前就能用WHERE剔除多余的 行,所以尽量不要用它们来做剔除行的工作。
SELECT store_name, SUM(sales) FROM Store_Information GROUP BY store_name HAVING SUM(sales) > 1500 报已经通过预审
外部优化
配置缓存:
缓存是指临时文件交换区,电脑 把最常用的文件从存储器里提出来临 时放在缓存里,就像把工具和材料搬 上工作台一样,这样会比用时现去仓 库取更方便。
配置缓存可以有效的降低数据库 查询读取次数,从而缓解数据库服务 器压力,达到优化的目的,一定程度 上来讲,这算是一个“围魏救赵”的 办法。 可配置的缓存包括 索引缓存(key_buffer), 排序缓存(sort_buffer), 查询缓存(query_buffer), 表描述符缓存(table_cache)。