日期:2014-05-18  浏览次数:20380 次

这样的查询语句效率如何?
各位兄弟帮我看看这句语句吧,我执行起来特别的慢!
我想在一个文章表里查询指定日期的记录,这个日期由日期控件的值来确定,我这个文章表中的记录有八十多万条(一个新闻系统)。

string   selectdate=this.Calendar1.SelectedDate.ToString( "yyyy-MM-dd ");
string   sqlstr= "SELECT   *   FROM   dbo.tb_Article   WHERE   CONVERT(VARCHAR(10),PubDate,120)   like     '% "+selectdate+ "% ' ";

以上是我使用的查询语句。

各位高手看看这样的语句效率是不是很差呢?
哪位有没有更好的语句,请指点一下!谢了!

------解决方案--------------------
建议:
如果确定选择列了,不要用select *
日期怎么用like呢,=不就行了
------解决方案--------------------
string sqlstr= "SELECT * FROM dbo.tb_Article WHERE CONVERT(VARCHAR(10),PubDate,120) like '% "+selectdate+ "% ' ";

1.
不要在条件查询列上使用函数, 在这里相当于对你的80w条数据逐条 CONVERT , 然后再比较

2.
PubDate 是日期类型 ? ( 以下假设 TRUE )
日期类型请直接使用 = 或者 between 等逻辑运算符

3.
建议
string sqlstr= "SELECT * FROM dbo.tb_Article WHERE PubDate = ' " + selectdate + " ' ";

4.
请在 PubDate 上建立索引
!!!用好了索引,性能有可能成倍提高,
如果,你不知道什么是索引,请 google 数据库 索引

Good Luck!

------解决方案--------------------


string selectdate=this.Calendar1.SelectedDate.ToString( "yyyy-MM-dd ");
string sqlstr= "SELECT * FROM dbo.tb_Article WHERE DATEDIFF(d, "+ selectdate+ ",[PubDate])=0 ";


d指天数.有相应的年,月,日,小时,分等...SQL有写好的函数
------解决方案--------------------
string selectdate=this.Calendar1.SelectedDate.ToString( "yyyy-MM-dd ");
string sqlstr= "SELECT * FROM dbo.tb_Article WHERE DATEDIFF(d, ' "+ selectdate+ " ',[PubDate])=0 ";
------解决方案--------------------
少了分号....不好意思