查询速度问题 ( 积分: 100 )

  • 主题发起人 主题发起人 gxkmdnk
  • 开始时间 开始时间
G

gxkmdnk

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个表,表名为userrights,结构为&nbsp;username&nbsp;char&nbsp;&nbsp;8<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password&nbsp;char&nbsp;&nbsp;6<br>我发现一个奇怪的问题<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果我用以下语句<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmdstr:='select&nbsp;*&nbsp;from&nbsp;userrights';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adodataset1.commandtext:=cmdstr;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adodataset1.open;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;则执行速度很快.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;但是加一个条件:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmdstr:=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'select&nbsp;*&nbsp;from&nbsp;userrights&nbsp;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmdstr:=cmdstr+'&nbsp;where&nbsp;username='+''''+'3'+'''';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adodataset1.commandtext:=cmdstr;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adodataset1.open;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;则速度很慢,上面的sql语句直接在sql服务器上执行又很快,感觉到是这句传到sql服务器的时间很慢
 
我的数据量很小,只有几条记录
 
语句没问题,查查其它地方。
 
adodataset1&nbsp;换成AdoQuery...,table&nbsp;注意主键和index都要有&nbsp;&nbsp;你就会发现快很多很多了<br>原因...还是自己找下...我这里就不讲了<br>没有必要一下拿所有的数据
 
cmdstr:=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'select&nbsp;*&nbsp;from&nbsp;userrights&nbsp;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmdstr:=cmdstr+'&nbsp;where&nbsp;username='+''''+'3'+'''';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adodataset1.commandtext:=cmdstr;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adodataset1.open;<br>把=换成&nbsp;like&nbsp;,变成<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmdstr:=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'select&nbsp;*&nbsp;from&nbsp;userrights&nbsp;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmdstr:=cmdstr+'&nbsp;where&nbsp;username&nbsp;like&nbsp;'+''''+'3'+'''';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adodataset1.commandtext:=cmdstr;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adodataset1.open;<br><br>就快了,太奇怪了
 
原因很简单:like操作&nbsp;只要部分内容相同就停止比较,但是=操作,必须将所有内容比较一遍,速度当然不一样了。<br>其实你可以建立主关键字索引,然后使用&nbsp;精确范围的like&nbsp;,或者用=&nbsp;速度都会很快,如果数据量大,就建立聚合簇索引&nbsp;可以提高检索效率的。
 

Similar threads

后退
顶部