|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
即使对于MySQL的商业化的企业版来说,也没有高昂的许可证成本,当你将其与像甲骨文和微软之类的大型专有商业数据库比较的话。创立|索引问:我发明sysindexes索引表中的良多条目并非我本人创立的。传闻它们并非真实的索引,而是SQLServer查询优化器主动创立的统计。如何才干辨认哪些是真实的索引,哪些是SQLServer主动创立的统计呢?
答:依照默许设置,假如表中的某列没有索引,则SQLServer会主动为该列创立统计。然后,查询优化器评价该列中数据散布局限的统计信息,以选择一个更加无效的查询处置计划。分辩主动创立的统计很复杂,在SQLServer7.0和SQLServer2000中,主动创立的统计的前缀为_WA_Sys。
您还可使用INDEXPROPERTY()函数的IsAutoStatistics属性来辨别一个索引是真实的仍是主动创立的统计,让SQLServer优化器选择必要创立的统计。您还能够为您办理的数据库启用“主动创立统计表”选项。
良多人疏忽了上面的分明的结论。主动创立统计的存在乎味着某个真实的索引大概会从中受害。请思索以下代码的输入:
USEtempdb
GO
IFOBJECTPROPERTY(OBJECT_ID(dbo.orders),IsUserTable)=1
DROPTABLEdbo.orders
GO
SELECT*INTOtempdb..ordersFROMnorthwind..orders
GO
SELECT*FROMtempdb..ordersWHEREorderid=10248
GO
SELECT*FROMtempdb..sysindexesWHEREid=object_id(orders)
ANDnameLIKE
_wa_sys%
GO
该代码在tempdb中复制NorthwindOrders表,选择一行,然后反省SQLServer是不是增加了一个统计。很明显,该表没有OrderId列的索引,以是SQLServer主动创立了名为_WA_Sys_OrderID_58D1301D的统计。OrderId列统计表的存在标明NorthwindOrders表将得益于附加的索引。
以下查询显现了为数据库中每一个用户表主动创立的统计的数目,该数据库最少有一个主动创立的统计。
SELECT
object_name(id)TableName
,count(*)NumberOfAutoStats
FROM
sysindexes
WHERE
OBJECTPROPERTY(id,NIsUserTable)=1
ANDINDEXPROPERTY(id,name,IsAutoStatistics)=1
GROUPBY
object_name(id)
ORDERBY
count(*)DESC
并非一切的统计都可被真实的索引所替换。在某些情形下,SQLServer会为一个表主动创立凌驾50个统计。很分明,这些表的索引战略很低劣。对表及主动创立的与之相干联的统计的疾速记数能够匡助您断定哪些表必要索引。
―MicrosoftSQLServer开辟团队
要想在MySQL与其他数据库之间进行一个面面俱到的功能设置对比,并不是一件容易的MySQL学习教程。随着新软件版本的发布或一些补丁的推出。 |
|