近来大家讨论了一个问题,关于Sybase性能优化中,程序设计和编成对性能的“贡献率”,索引对性能的“贡献率”。
显然,性能和数据库设计、程序写法有着极大的关系,如果数据库没有好的设计,程序没有优化的编程,单凭Sybase参数优化、物理优化,这样的调整不可能有好的性能结果:应用程序、数据库后台程序决定了性能的80%,在硬件一定的条件下。
在应用已经确定的情况下,缩短响应时间的最佳办法是减少物理I/O,其方法来自于判断索引的有效性、必要性、正确性。总的来说,IO减少会导致性能提升缩短响应时间,而这很大程度上依赖索引:
- 在一定数据量下避免全表扫描。
- 定位查询中定位数据位置。
- 范围查询中确定上下限位置。
- 在索引科完全使用时采用索引覆盖,完全数据访问。
- 在连接时避免排序操作。
但不是什么时候都可以建立索引,一般情况下可以按照下面的原则创建初始的索引,并测试运行其有效性:
- 为Unique和primary key创建唯一索引,unique创建nonclustered多饮,primary key创建clustered索引;
- 如果可能用索引来覆盖查询,则可以使用索引覆盖来进行查询操作。
- 如果需要DML操作的表,如果将clustered索引建立了在单调递增的字段上,如序号列,则则坑农造成索引征用,如果恰好是allpages表,则锁争夺会成为必然。
- 如果能建立唯一性索引则最好唯一,这样优化程序知道只要返回一行纪录即可,及早结束查询。
- 索引键不可以太大,如使用小的数据类型。
- 创建索引时,“谁在前面”很关键;
- 应用程序中应尽量使用索引对象,如查询中引用被索引前导列