RSS 2.0 Feed
2005-09 Entries
摘要:在SQL 2005中,字符串索引支持模糊匹配,如like '%abc%'的查询。在SQL 2000中,字符串索引仅支持前导匹配,如like 'abc%'的查询。 这样不仅是在搜索时能够查找较少的page,更重要的是,SQL查询优化器能够准确的得到EstimateRows,就可以选择最适合的index,而SQL2000就只能瞎蒙。 不过呢,我在测试中发现这样的优化貌似不支持中文,于是和Access Method的人一起跟了一下,最后发现必须要是unicode类型的才能够支持中文。该问题已经提交为bug,在SQL 2005 SP1中应当能够得到解决。...[阅读全文]

posted @ | Feedback (10) |

摘要: 在SQL 2005中,临时表和表变量的使用和以往没有什么区别。不过呢,新的SQL OS还是为我们带来了一些内部的变化。 在SQL2000里面,如果执行计划关系到动态对象,如表变量、触发器等,计划就不会被缓存SQL2005能缓存这些计划,避免了每次的重编译。 tempdb会缓存临时表和表变量(@t, #t) 而且SQL 2005对tempdb的改动比较大,也会提高临时表的性能,具体细节我不介绍了,不过呢,有两点建议:增加tempdb的大小,增加tempdb的文件数目(至少和CPU数目相同)。 关于SQL 2005对tempdb的改动,可以参见 http://blogs.msdn.com/weix/archive/2005/09/13/464907.aspx [SQL Server 2005] TEMPDB optimization...[阅读全文]

posted @ | Feedback (3) |

摘要:为什么要说也呢?请参见http://www.sql-club.com/net2004/archive/2005/09/13/199.aspx Partition一直就是一个很难用于实际应用的功能。为什么呢?选择分区字段是一个关键。必须要能使数据均匀的分散到不同的物理存储,又能使分区字段能够包含查询条件。在smaple中大多是以ID或者Time作为分区字段,但是实际应用中,大部分查询都不会在这两个字段上。以MSN为例,我登录的时候,要查询where username = 'luke@hotmail.com' --这不是我的passport大部分的查询也是基于username的。那么,我们以username为分区条件如何?可是这样会造成分区不均衡,显然s开头的就比x开头的要多许多。当然,我们可以分析出字母序的分布概率,但是这是一个挺麻烦的工作,如果还考虑中文,就更加的麻烦了。怎么办呢?MSN采用的方法是对username的hash值进行分区,值得借鉴哦~hash的原理我不多介绍了,它有一个功能就是可以把字符串的hash值做到基本平均的分布。 SQL 2005自带一个hash函数,语法如下HashBytes ( '', { @input | 'input' } )支持MD2, MD4, MD5, SHA, or SHA1 算法返回值varbinary (maximum 8192 bytes)...[阅读全文]

posted @ | Feedback (6) |

摘要:内容有点长,只放个链接。 http://www.sql-club.com/luke/articles/160.aspx...[阅读全文]

posted @ | Feedback (0) |

摘要:在SQL 2005中,建立新数据库时,checksum是默认选项,它可以提高硬件的可靠性。 使用DBCC CHECKDB ('database_name' | database_id) WITH PHYSICAL_ONLY 就可以检查checksum是否正确。当然,不用WITH PHYSICAL_ONLY 也行,不过会检查更多的东西,速度也会降低。 要关闭Checksum,可以使用ALTER DATABASE database_nameSET PAGE_VERIFY NONE,或者使用ALTER DATABASE database_nameSET PAGE_VERIFY TORN_PAGE_DETECTION SQL 2000中,只对TORN_PAGE_DETECTION 进行处理,即每512字节放一个校验位,这样对资源使用更少,不过可靠性也更低。...[阅读全文]

posted @ | Feedback (3) |