none
到底要不要在SQL Server的数据库里面建立索引? RRS feed

  • 问题

  • 有人说, 建立索引会降低性能, 特别是数据表里的数据经常更新时. 也有人说, 如果不建立索引, 查询数据时, SQL Server就得从上到下一个一个找, 速度和性能都非常低.

     

     

    我的数据库里的信息是经常更新的, 例如客户的数据表. 每天都有新客户到我的网站注册.

     

     

    那么, 我要为客户的数据表建立索引吗?

     

     

    谢谢!

    2008年8月2日 6:20

答案

  • Yes, every table should have at least a cluster index, real issue is how to find proper candidate. Read books online for details.

     

    2008年8月2日 17:30
  • Code Snippet

     

    那么, 我要为客户的数据表建立索引吗?

     

     

     

    要根据需要建索引,客户表应用时,按条件查找时。。要在常用的条件列上建索引。。

     

    索引会提高select的性能,同时也降低delete\update\insert,这三个操作会引发索引重建和索引碎片。通常一个表的索引数不超过6个,当超过时要考虑是否可拆分为两个表或多个表...

     

    可参照联机

    http://msdn.microsoft.com/zh-cn/library/ms189271(SQL.100).aspx

    2008年8月3日 6:02
    版主
  • In fact, proper indexing can speed up update/delete as well.

     

    2008年8月3日 21:26
  • Depends on data stored in the table and how to query them. There is no standard for that, you have to test and try with tool like database tuning wizard (sql2k5) or index tuning wizard (sql2k). But do have some basic guidelines based on people's experience, search Kalen Delaney's articles about indexing in this link: http://www.sqlmag.com/ 

    2008年8月4日 15:19
  • --加上nolock不受表delete\insert\update的影響
    select * from UserMTR with(nolock) where UserName='NN' and Password='**'

    或設置會話

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED--臟讀

    select * from UserMTR  where UserName='NN' and Password='**'

    2008年8月6日 10:12
    版主
  • Be careful with nolock hint, it causes dirty read. Can't use it if you need consistent result. 

    2008年8月6日 13:47
  •  

    臟讀的简体是什么?

     

    --

     

    脏读

    2008年8月6日 15:00
  • 中國風是不是在台湾?
    公司不是大陸的.
    2008年8月8日 1:35
    版主

全部回复

  • Yes, every table should have at least a cluster index, real issue is how to find proper candidate. Read books online for details.

     

    2008年8月2日 17:30
  • Code Snippet

     

    那么, 我要为客户的数据表建立索引吗?

     

     

     

    要根据需要建索引,客户表应用时,按条件查找时。。要在常用的条件列上建索引。。

     

    索引会提高select的性能,同时也降低delete\update\insert,这三个操作会引发索引重建和索引碎片。通常一个表的索引数不超过6个,当超过时要考虑是否可拆分为两个表或多个表...

     

    可参照联机

    http://msdn.microsoft.com/zh-cn/library/ms189271(SQL.100).aspx

    2008年8月3日 6:02
    版主
  • In fact, proper indexing can speed up update/delete as well.

     

    2008年8月3日 21:26
  •  

    什么才是合适的索引?

     

    我只想让客户登录时速度快点, 这样就可以了. 但是, 我却不想因此降低客户注册, 更新个人信息等操作速度.

     

     

    这有什么好办法和策略?

    2008年8月4日 11:45
  • Depends on data stored in the table and how to query them. There is no standard for that, you have to test and try with tool like database tuning wizard (sql2k5) or index tuning wizard (sql2k). But do have some basic guidelines based on people's experience, search Kalen Delaney's articles about indexing in this link: http://www.sqlmag.com/ 

    2008年8月4日 15:19
  • --加上nolock不受表delete\insert\update的影響
    select * from UserMTR with(nolock) where UserName='NN' and Password='**'

    或設置會話

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED--臟讀

    select * from UserMTR  where UserName='NN' and Password='**'

    2008年8月6日 10:12
    版主
  • 谢谢RM和中國風了.

     

    只是,  中國風是不是在台湾? 怎么会打出繁体字?

     

     

    臟讀的简体是什么?
    2008年8月6日 12:23
  • Be careful with nolock hint, it causes dirty read. Can't use it if you need consistent result. 

    2008年8月6日 13:47
  •  

    臟讀的简体是什么?

     

    --

     

    脏读

    2008年8月6日 15:00
  • 中國風是不是在台湾?
    公司不是大陸的.
    2008年8月8日 1:35
    版主