这个问题太奇怪了,
我在SQL2005数据库中建立了两个查询
Select * From A,B Where B like A +N'%'
Select a.HName ,a.Wordname From A, B like A +N'%'
发现 前一查询速度比后一查询快很多倍. 后来发现原来 第一个查询在运行时会自动调用表A中存在的聚集索引, 但下面的查询在运行时却不会这样做。 后来我 试着把下面的查询显示字段一一减少来看那些字段时造成系统索引选择的重要原因。结果发现 HName,Wordname,Address,PinYin 这几个在A表中存在的字段全被显示出来时其速度和第一个查询相似, 少一个就不行。 这让我很惊讶,因为这几个字段只是A表中的普通字段(没建索引也不经常访问)为什么会对结果产生这么大的影响。
因为我只想得到字段HName,不想得到所有字段 不知该怎么做。 无论改为子查询还是别的方式,只要输出字段少于一定数目,查询结果一下就变的不能忍受。谁能说说原因及解决办法吗?
我在SQL2005数据库中建立了两个查询
Select * From A,B Where B like A +N'%'
Select a.HName ,a.Wordname From A, B like A +N'%'
发现 前一查询速度比后一查询快很多倍. 后来发现原来 第一个查询在运行时会自动调用表A中存在的聚集索引, 但下面的查询在运行时却不会这样做。 后来我 试着把下面的查询显示字段一一减少来看那些字段时造成系统索引选择的重要原因。结果发现 HName,Wordname,Address,PinYin 这几个在A表中存在的字段全被显示出来时其速度和第一个查询相似, 少一个就不行。 这让我很惊讶,因为这几个字段只是A表中的普通字段(没建索引也不经常访问)为什么会对结果产生这么大的影响。
因为我只想得到字段HName,不想得到所有字段 不知该怎么做。 无论改为子查询还是别的方式,只要输出字段少于一定数目,查询结果一下就变的不能忍受。谁能说说原因及解决办法吗?
Select a.HName ,a.Wordname From A, B like A +N'%' 我怎么看像是CROSS JOIN。
你可以试试Select a.HName ,a.Wordname From A, B where like A +N'%'
Select * From A inner join B on B.HName like A.Hname +N'%'
Select a.HName ,a.Wordname From A inner join B on b.HName like A.Hname +N'%'
结果一样,发现第一条语句速度很快,但第二条语句速度很慢。虽然我在HName字段上建立了索引,但是不能取得效果
Select A2.HName ,B.HName,A.Hname From AA as A1 ,AA as A2 inner join B on b.HName like A1.Hname +N'%' where A1.ID=A2.ID
后来发现速度非常慢。虽然我创建了针对HName和ID的索引.如果我把返回内容改为 Select * From ....则系统会迅速返回结果。两者差别非常大。 (AA表数据在6万左右,并不算大)
后来发现在使用Select * 查询时系统会使用聚集索引,但返回指定内容时却要进行全表扫描