这样的查询语句效率如何?
各位兄弟帮我看看这句语句吧,我执行起来特别的慢!
我想在一个文章表里查询指定日期的记录,这个日期由日期控件的值来确定,我这个文章表中的记录有八十多万条(一个新闻系统)。
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 ";
------解决方案--------------------少了分号....不好意思