use*_*969 5 sql-server indexing sql-server-2008
我对选择正确的索引有一些疑问,并有一些问题:
聚集索引
什么是最佳人选?
通常是主键,但如果主键未在搜索中使用,例如CustomerNo用于搜索客户应该聚集索引CustomerNo吗?
使用SchemaBinding的视图
如果有一个带索引的视图,我读到这些不被使用但是那些在表上.
毫无意义?或者我错过了这一点?使用"NOExpand"强制从视图而不是表中读取索引会有所不同吗?
非聚集索引
添加非聚集索引以包含每个可能的列,直到达到限制为止,这是一种很好的做法吗?
非常感谢你的时间.我正在阅读海量数据库,速度是必须的
的聚簇索引是(a)中定义的表的存储布局的索引在该表上的每一个非聚集索引(表数据是由聚集键物理排序),和(b)被用作"行定位器" .
因此,聚集索引应该是
Varchar(x)在聚集索引中使用大列出于这些要求,INT IDENTITY似乎是最合乎逻辑,最明显的选择.不要使用可变长度列,不要使用多列(如果可能的话),不要使用GUID(由于它的大小和随机性,这是一个非常糟糕的选择)
有关群集密钥和聚簇索引的更多背景信息 - 阅读Kimberly Tripp发布的所有内容!她是SQL Server 索引的女王 - 她非常了解她的东西!
参见例如这些博客文章:
一般来说:不要过度索引!太多的指数往往比没有更糟糕!
对于非聚集索引:我通常会索引外键列 - 这些索引有助于JOIN和其他操作,并使事情更快.
除此之外:不要在数据库中放置太多索引!必须在桌面上的每个CRUD操作上维护每个索引!这是开销 - 不要过度索引!
包含表的所有列的索引是一个特别糟糕的主意,因为它实际上不能使用太多 - 但是会带来很多管理开销.
运行您的应用程序,对其进行概要分析 - 查看哪些操作很慢,尝试通过向表中添加一些选择性索引来优化这些操作.
| 归档时间: |
|
| 查看次数: |
6740 次 |
| 最近记录: |