【讨论】哪种速度快...

outwindows 2004-06-11 06:09:07
e.g:假设'22'只是某个变量的值...
select*fromTEST_NOwhereBAS_NOlike'22%'
select*fromTEST_NOwhereleft(BAS_NO,len('22'))='22'
----------------------------------------------------------------
CREATETABLE[TEST_NO]([BAS_ID][int]NOTNULL,[BAS_NO][char](15)NULL,[BAS_NAME][char](32)NOTNULL,[description][text]NULL)
ALTERTABLE[TEST_NO]WITHNOCHECKADDCONSTRAINT[PK_TEST_NO]PRIMARYKEYNONCLUSTERED([BAS_ID])
CREATEUNIQUEINDEX[IX_TEST_NO]ON[TEST_NO](BAS_NO)
CREATEUNIQUEINDEX[IX_TEST_NO_1]ON[TEST_NO](BAS_NAME)

INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(2,'05','东莞05')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(10,'13','江门13')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(12,'15','人力15')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(13,'16','商贸16')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(17,'20','网络20')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(18,'21','财务21')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(19,'22','设计22')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(20,'23','客户23')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(28,'31','行政31')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(29,'32','珠海32')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(14601321,'34','系统34')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15014190,'39','话务39')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15037240,'43','其它43')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15047248,'46','软件46')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15047249,'4601','软件4601')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15047250,'4602','软件4602')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15052340,'48','广州48')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15052366,'4801','广州4801')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15052683,'4802','广州4802')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15052685,'4803','广州4803')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15052686,'4804','广州4804')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15052687,'4805','广州4805')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15054540,'49','佛山49')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15054541,'4901','佛山4901')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15058169,'1604','搜索1604')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15058173,'2201','中山2201')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15058174,'2202','中山2202')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15058175,'2203','广州2203')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15058176,'2204','多媒2204')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15058177,'2205','设计2205')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15059049,'2206','顺德2206')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15059070,'220201','佛山220201')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15059073,'220101','佛山220101')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15059074,'220202','珠海220202')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15059075,'220102','东莞220102')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15059076,'220103','江门220103')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15059223,'1301','江门1301')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15059227,'1302','江门1302')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15059228,'1303','江门1303')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15059233,'0501','东莞0501')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15059234,'0502','东莞0502')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15059235,'0503','东莞0503')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15059724,'2101','广州2101')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15054542,'4902','佛山4902')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15054543,'4903','佛山4903')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15054544,'4904','佛山4904')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15055849,'1601','业务1601')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15055853,'50','珠海50')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15055854,'5001','珠海5001')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15055855,'5002','珠海5002')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15055856,'5003','珠海5003')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15055857,'5004','珠海5004')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15056194,'51','顺德51')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15056195,'52','中山52')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15056196,'5101','顺德5101')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15056197,'5102','顺德5102')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15056198,'5103','顺德5103')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15056199,'5201','中山5201')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15056200,'5202','中山5202')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15056201,'5203','中山5203')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15056202,'5204','中山5204')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15056203,'5205','中山5205')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15056205,'5206','中山5206')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15058165,'1602','网站1602')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15058166,'1603','客户1603')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15059725,'2102','顺德2102')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15059726,'2103','佛山2103')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15059727,'2104','东莞2104')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15059728,'2105','珠海2105')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15059730,'2106','江门2106')
INSERT[TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])VALUES(15061565,'2107','中山2107')
...全文
363 45 打赏 收藏 转发到动态 举报
写回复
用AI写文章
45 条回复
切换为时间正序
请发表友善的回复…
发表回复
outwindows 2004-06-23
  • 打赏
  • 举报
回复
这么多,散得太累,以后还是不要散分的好...
outwindows 2004-06-23
  • 打赏
  • 举报
回复
有没有平均给分的功能啊...
outwindows 2004-06-23
  • 打赏
  • 举报
回复
结了...
flyingZFX 2004-06-22
  • 打赏
  • 举报
回复
^_^
dlkfth 2004-06-17
  • 打赏
  • 举报
回复
还是快跟慢的 问题,把sql帮助搞一便,数据结构,数据库概论搞一遍,然后问你自己:)
cysh 2004-06-16
  • 打赏
  • 举报
回复
1要快一些!
xubinhui 2004-06-16
  • 打赏
  • 举报
回复
楼主有心.
pbsql 2004-06-14
  • 打赏
  • 举报
回复
如果是200万条甚至2000万条那就大不一样了

另外,我觉得有时执行计划并不能反映真实的情况
tx1icenhe 2004-06-14
  • 打赏
  • 举报
回复
从执行计划看,在数据量不是很大(20万条)的情况下:
select * from TEST_NO with(index(IX_TEST_NO)) where BAS_NO like '22%'
效率不如
select * from TEST_NO where BAS_NO like '22%'
pbsql 2004-06-14
  • 打赏
  • 举报
回复
select * from TEST_NO with(index(IX_TEST_NO)) where BAS_NO like '22%'
outwindows 2004-06-14
  • 打赏
  • 举报
回复
--出错
--在关键字 'with' 附近有语法错误。
select * from TEST_NO where BAS_NO with(index(IX_TEST_NO)) where BAS_NO like '22%'
pbsql 2004-06-14
  • 打赏
  • 举报
回复
条件里用常量和变量是不一样的,用常量时SQL可能会用到索引,用变量时则不会自动引用索引(这个问题已讨论过)

所以当SQL不会自动引用索引时最好指定索引:
select * from TEST_NOwhereBAS_NO with(index(索引名称)) where ...
outwindows 2004-06-14
  • 打赏
  • 举报
回复
set @r=@r+@@rowcount 这里不是增加了么...
我的机器打开东西太多,insert了516028条数据就死掉了,花了一个60-70分钟...
outwindows 2004-06-14
  • 打赏
  • 举报
回复
--516028条数据...

--0:04
select * from TEST_NO with(index(IX_TEST_NO)) where BAS_NO like '22%'

--0:01
select * from TEST_NO where BAS_NO like '22%'
icedut 2004-06-14
  • 打赏
  • 举报
回复
测试
标的记录数:24771059
记过记录数: 2678509

1) like '43%'
2) left(col1,2)= '43'

2)用时间是1)的6倍多
pbsql 2004-06-14
  • 打赏
  • 举报
回复
帮助上说:

鼓励使用 WITH 关键字,尽管目前这还不是必须。在将来的 SQL Server 版本中,WITH 可能会成为必需的关键字。
bflovesnow 2004-06-13
  • 打赏
  • 举报
回复
邹建 的成功么??
bflovesnow 2004-06-13
  • 打赏
  • 举报
回复
晕S,怎么这段的 循环 中,@r 始终是 0,而不增加呢???

declare @r int
set @r=0
while @r<=1000000
begin
INSERT [TEST_NO]([BAS_ID],[BAS_NO],[BAS_NAME])
select @r
,b=replace(cast(newid() as varchar(128)),'-','')
,c=replace(cast(newid() as varchar(128)),'-','')
from syscolumns
set @r=@r+@@rowcount
end
zslhfdyx 2004-06-13
  • 打赏
  • 举报
回复
up...
outwindows 2004-06-13
  • 打赏
  • 举报
回复
--测试结果...
--512M+C1.7G+40G win2kP
--打开了QQ、DreamMail
--满足条件的数据/总数据条数 2071/516028
declare @dt1 datetime,@dt2 datetime,@dt3 datetime,@dt4 datetime

--A
set @dt1=getdate()
select * from TEST_NO where BAS_NO like '22%'
set @dt2 = getdate()
--B
set @dt3 = getdate()
select * from TEST_NO where left(BAS_NO,len('22'))='22'
set @dt4 = getdate()

select A=datediff(ms,@dt1,@dt2),B=datediff(ms,@dt3,@dt4)
----------------------------------------------------------
CREATE UNIQUE INDEX [IX_TEST_NO] ON[TEST_NO](BAS_NO)
A B
720 843
703 813
703 843
720 793
750 796
733 780
733 796
720 780
796 783
703 796
----------------------------------------------------------
CREATE UNIQUE CLUSTERED INDEX [IX_TEST_NO] ON[TEST_NO](BAS_NO)
A B
80 826
63 826
63 810
63 810
63 843
63 810
63 813
60 813
63 813
63 826
加载更多回复(25)

11,849

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧