admin 管理员组文章数量: 1086019
2024年4月17日发(作者:照片边框装饰图片)
1.关于索引优化 建索引的选择必须结合SQL查询、修改、删除语句的需要,一
般的说法是在WHERE里经常出现的字段建索引。如果在WHERE经常是几个字段一起出
现而且是用AND连接的,那就应该建这几个字段一起的联合索引,而且次序也需要考虑,
一般是最常出现的放前面,重复率低的放前面。 SQL Server提供了一种简
化并自动维护数据库的工具。这个称之为数据库维护计划向导(Database Maintenance
Plan Wizard ,DMPW)的工具也包括了对索引的优化。如果你运行这个向导,你
会看到关于数据库中关于索引的统计量,这些统计量作为日志工作并定时更新,这样就减
轻了手工重建索引或者DBCC INDEXDEFRAG所带来的工作量。如果你不想自动定期
刷新索引统计量,你还可以在DMPW中选择重新组织数据和数据页,这将停止旧有索引
并按特定的填充因子重建索引。
2. 改善硬件(双CPU,Raid 5,增加内存) tempdb这个临时数据库,它对
性能的影响较大。tempdb和其他数据库一样可以增大,可以缩小。当数据文件需要增长
的时候,通常不能保持剩余部分的连续性。这时文件就会产生碎片,这种碎片会造成性能
下降。这种碎片属于外来性碎片。要阻止在tempdb中产生外来性碎片,必须保证有足够
的硬盘空间。一般将tempdb的容量放到平均使用容量。而你也应该允许tempdb自动增
长,比如你有个一个超大的join操作,它建立了一个超过tempdb容量的时候,该查询将
失败。你还要设置一个合理的单位增长量。因为如果你设得太小,将会产生许多外来性碎
片,反而会占用更多资源。sqlserver调优最有效的做法之一,就是把争夺资源的操作独立
出去。tempdb就是一个需要独立出去的部分而tempdb和其他系统库一样是公用的,是
存取最可能频繁的库,所有处理临时表、子查询、GROUP BY、排序、DISTINCT、连
接等等。它最适合放到一个具有快速读写能力的设备上。比如RAID0卷或RAID0+1卷上。
查询语句一定要使用存储过程;
3、查询尽量使用TOP子句
4.将表按一定的约束分成子表,(如按分类)创建约束,在用Like 时,先用分类 and
like , 应该可能解决问题.
1.合理使用索引
索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。现在大多数
的数据库产品都采用IBM最先提出的ISAM索引结构。索引的使用要恰到好处,其使用原
则如下:
●在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优
化器自动生成索引。
●在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引。
●在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立
索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立
索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。
●如果待排序的列有多个,可以在这些列上建立复合索引(compound index)。
●使用系统工具。如Informix数据库有一个tbcheck工具,可以在可疑的索引上进行
检查。在一些数据库服务器上,索引可能失效或者因为频繁操作而使得读取效率降低,如
果一个使用索引的查询不明不白地慢下来,可以试着用tbcheck工具检查索引的完整性,
必要时进行修复。另外,当数据库表更新大量数据后,删除并重建索引可以提高查询速度。
2.避免或简化排序
版权声明:本文标题:如何提高SQL查询速度 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1713348190a630223.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论