高性能SQL语句???

dys_198102 2009-05-05 01:19:02
现在有一个查询,按课程查找:对应字段kc 按类型选择查找:lc 按公开程度:gk 按作业名称查找:name 按时间查询:time
select * from xiti;
它们可以单个查询也可以选中几项一起查询,以我的想法要写好几个SQL语句,有没有变通的方法,提高一点效率...???
...全文
194 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2009-05-05
  • 打赏
  • 举报
回复
SELECT *
FROM userxiti
WHERE (userid = 39) AND datediff(d,riqi,now())=1
ORDER BY id DESC
在存储过程里查询
set @sql='select * from A where 1=1'
if(@A!='')
set @sql=@sql+''
防止SQL注入,替换一些字符
皓月明 2009-05-05
  • 打赏
  • 举报
回复
做几个判断然后给条件不就可以了
likingdom 2009-05-05
  • 打赏
  • 举报
回复
要想查询速度快,还是加索引吧
lsd123 2009-05-05
  • 打赏
  • 举报
回复
.
zhouyongli41 2009-05-05
  • 打赏
  • 举报
回复
StringBuilder字符少的时候也不见得快,这里应该用不上
kkai189 2009-05-05
  • 打赏
  • 举报
回复
个人认为,要想提高查询效率,最直接的是 索引
kkai189 2009-05-05
  • 打赏
  • 举报
回复
看到最后,不知道再讨论什么了?
晕人路过!
llsen 2009-05-05
  • 打赏
  • 举报
回复
up 了
ViewStates 2009-05-05
  • 打赏
  • 举报
回复
14L的。

22L。你仔细看看,如果没有1=1的话可能会出现
select * from table1 where这样的语句。没什么特别的
Micao_tong 2009-05-05
  • 打赏
  • 举报
回复
請問為什麼要加上"1=1"
select * from table1 where 1=1
select * from table1
上面的那種寫法有什麼好處嗎?
takako_mu 2009-05-05
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 dys_198102 的回复:]
SELECT *
FROM userxiti
WHERE (userid = 39) AND (riqi = DATEADD(dd, - 1, riqi))最近一天的记录.好像不太对,高手指点一下,有没有错....
ORDER BY id DESC
[/Quote]
用between.
dys_198102 2009-05-05
  • 打赏
  • 举报
回复
SELECT *
FROM userxiti
WHERE (userid = 39) AND (riqi = DATEADD(dd, - 1, riqi))最近一天的记录.好像不太对,高手指点一下,有没有错....
ORDER BY id DESC
llsen 2009-05-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cpp2017 的回复:]
string strSQL = "select * from xiti where 1=1 "

if(kc!="")
{
strSQL += " AND kc=.."
}

if(gk!="")
{
strSQL += " AND ...

}
[/Quote]

这样拼sql语句
不过要防止被注入
这种是最容易被注入的了
takako_mu 2009-05-05
  • 打赏
  • 举报
回复

--当月天数
select day(dateadd(ms,-3,dateadd(m,datediff(m,0,getdate())+1,0)))
select day(dateadd(dd,-day(getdate()),dateadd(m,1,getdate())))
--当月第一天
select dateadd(dd,-day(getdate())+1,getdate())
--当月最后一天
select dateadd(dd,-day(getdate()),dateadd(m,1,getdate()))
--本年最后一天
select dateadd(d,-day(getdate()),dateadd(m,12,getdate()))--錯的
select dateadd(ms,-3,dateadd(yy,datediff(yy,0,getdate())+1,0))
--当月第一个星期一
select dateadd(wk,datediff(wk,'',dateadd(dd,-day(getdate())+6,getdate())),'')
--求2009年10月第一個星期一
select dateadd(wk,datediff(wk,'','2009-10-6'),'')
--求上周的星期一到星期天的資料
select dateadd(wk,datediff(wk,'',dateadd(wk,-1,getdate())),'')

select dateadd(wk,datediff(wk,'',getdate()),'')

--用日期相减时除去星期天,得到日期相减天数
declare @dateStart smalldatetime
declare @dateEnd smalldatetime
set @dateStart='2009-1-15'
set @dateEnd='2009-1-31'
select datediff(wk,'2009-1-12','2009-1-17')
--select day(@dateStart-@dateEnd)
select dateadd(wk,datediff(wk,'',@dateStart)+1,'')
select dateadd(wk,datediff(wk,'',@dateEnd),'')
dys_198102 2009-05-05
  • 打赏
  • 举报
回复
还有一个问题,就是一个字段是times datatime类型.要查询一天,一周,一个月,三个月,这个应怎么写哪.写过的朋友顶一下...
springbell 2009-05-05
  • 打赏
  • 举报
回复
dys_198102 2009-05-05
  • 打赏
  • 举报
回复
领教了,各位继续顶啊,14楼和7楼的方法不错...我自已顶一下.
lzzz999 2009-05-05
  • 打赏
  • 举报
回复

create Proc p_tabel1
@kc nvarchar(20),
@gk nvarchar(20),
@lc nvarchar(20),
@time nvarchar(20)
as
select kc,gk,lc,name,time from xiti
where
(kc =@kc or @kc='-1')
and (gk=@gk or @gk='-1')
and (lc = @lc or @lc='-1')
and (name =@name or @name ='-1')
and (time =@time or @time='-1')
go




string kc=txtkc.text==""?"-1":txtkc.Text.ToString();
string gk=txtgk.Text==""?"-1":txtgk.Text.ToString();
....

调用存储过程了.
为空的就传'-1'那样构成等式了.
cpp2017 2009-05-05
  • 打赏
  • 举报
回复
一般查询条件用str够了。。。。。在怎么组合查询条件也不可能大于1000个字节吧。。。
==
对,这只是个习惯问题.
  • 打赏
  • 举报
回复
一般查询条件用str够了。。。。。在怎么组合查询条件也不可能大于1000个字节吧。。。
加载更多回复(11)

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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