1. Watermark 效应。 当一个数据库运行很长时间(几个月,几年)表中的记录被反复的修改和删除后,大量的磁盘空间没有被回收, 外在的表现就是表占用的空间越来越大, 当需要执行全表扫描的查询时,出现查询缓慢的症状。
2. BLOB, CLOB字段的滥用。 两个表,一个有LOB类型的列,一个没有, 其中记录的条数都一样, 索引也一样, 那么查询数据一样嘛? 答案时否定的, 即使你没有查询LOB字段里面的内容, 有LOB类型的表也会比较慢。 这个在淘宝团队里面时做过验证的, 他们曾经使用的解决办法是把LOB字段单独提出来放在另外一张表里面。
3. 调整操作系统参数,例如:运行在UNIX操作系统上的ORACLE数据库,可以调整UNIX数据缓冲池的大小,每个进程所能使用的内存大小等参数。
其他常见的原因
1. 没有索引或者没有用到索引 数据库索引就像书籍中目录一样,使用户在访问数据库数据时,不必遍历所有数据就可以找到需要的数据。创建索引后,可以保证每行数据的唯一性,极大地提高数据检索效率,这是一中牺牲空间换取性能的方法。没有索引或者没有用到索引是数据访问速度慢最常见的因素,也是程序设计的一个缺陷所在。
2. I/O吞吐量小,形成了瓶颈效应 I/O吞吐量是影响数据访问速度的客观因素(硬件因素)。在一定的硬件环境下,利用优化的部署方案可适当提高I/O吞吐量。
3. 没有创建计算列导致查询不优化 计算列是一个比较特殊的列,不填写任何设计类型,用户不可以改变该列的值。计算列的值是通过一定的函数公式等以另一个或多个列
2. BLOB, CLOB字段的滥用。 两个表,一个有LOB类型的列,一个没有, 其中记录的条数都一样, 索引也一样, 那么查询数据一样嘛? 答案时否定的, 即使你没有查询LOB字段里面的内容, 有LOB类型的表也会比较慢。 这个在淘宝团队里面时做过验证的, 他们曾经使用的解决办法是把LOB字段单独提出来放在另外一张表里面。
3. 调整操作系统参数,例如:运行在UNIX操作系统上的ORACLE数据库,可以调整UNIX数据缓冲池的大小,每个进程所能使用的内存大小等参数。
其他常见的原因
1. 没有索引或者没有用到索引 数据库索引就像书籍中目录一样,使用户在访问数据库数据时,不必遍历所有数据就可以找到需要的数据。创建索引后,可以保证每行数据的唯一性,极大地提高数据检索效率,这是一中牺牲空间换取性能的方法。没有索引或者没有用到索引是数据访问速度慢最常见的因素,也是程序设计的一个缺陷所在。
2. I/O吞吐量小,形成了瓶颈效应 I/O吞吐量是影响数据访问速度的客观因素(硬件因素)。在一定的硬件环境下,利用优化的部署方案可适当提高I/O吞吐量。
3. 没有创建计算列导致查询不优化 计算列是一个比较特殊的列,不填写任何设计类型,用户不可以改变该列的值。计算列的值是通过一定的函数公式等以另一个或多个列