易截截图软件、单文件、免安装、纯绿色、仅160KB

SQL语句加入order by 子句之后的效率问题

在数据库中有一张表mytable,数据记录7000万条,有如下两条SQL语句
1.
select top 100 * from mytable order by operateDate
2.
select * from (select top 100 * from mytable ) a   order  by a.operateDate
      起初我使用第一条语句查询数据,并希望将得到的100条数据进行排序,结果执行了N秒结果才出现。后来我又使用了第二条语句查询数据,这次数据很快就将结果返回了。
      其实仔细对比结果,我发现,第一条语句是先将数据库中所有的数据按照operateDat字段进行排序后再返回前100条数据,那么这个过程就包括:一、对7000万条数据进行排序(汗~)。二、返回前100条数据。这样执行的效率极其低下,而且结果还不一定是我想要的。
      第二条语句是先查询出前100条数据,按后按照operateDat字段进行排序,这个过程包括:一、返回前100条数据。二、对返回的100条数据进行排序。笑一个,明显后者的效率要高得多。
      不过我们还是不能盲目的高兴,首先,我们得清楚的知道,我们到底想从数据库取到什么结果。我在写这个SQL语句的时候是希望得到数据库中的前100条数据,得到数据后希望他们按时间顺序显示给我,很显然,不再是1和2之间执行的效率问题了,而是使用语句1返回的结果并不是我预先想要的了。
       如果我的需求是想要得到数据库中按时间排序后的前100条数据,该怎么办?若是使用语句1,执行效率又非常低。这个时候我们只有借助其他方式了。比如这张表上是否有索引,索引建立的规则如何。分析过索引之后,我们看看已有的索引是否能满足当前的效率查询,如果不能满足,而且需要以第1条SQL语句取数据的次数非常频繁,那么你就该考虑是否要在operateDate建立一个索引了。
      当然了不排除能够通过SQL语句来满足结果和高效的执行,但是目前为止,作者还没想到好的办法,希望有一天能想到吧,如果哪位有更好的办法,也请不要吝啬分享之。


相关文档:

hibernate sql 操作

@SuppressWarnings("unchecked")
    public List<ZxFunction> selectFunctionParentByUserId(final int userId) {
        try {
            final String sql = "select *  from zx_function ......

SQL语句 创建索引

语法:
CREATE [索引类型] INDEX 索引名称
ON 表名(列名)
WITH FILLFACTOR = 填充因子值0~100
GO
/*实例*/
USE 库名
GO
IF EXISTS
(SELECT * from SYSINDEXES WHERE NAME='IX_TEST_TNAME')--检测是否已经存在IX_TEST_TNAME索引
DROP INDEX
TEST.IX_TEST_TNAME--如果存在则删除
--创建索引
CREATE NONCLUSTER ......

不错的SQL面试题(二)

问题描述:
本题用到下面三个关系表:
CARD     借书卡。   CNO 卡号,NAME  姓名,CLASS 班级
BOOKS    图书。     BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数
BORROW   借书记录。 CNO 借书卡号,BNO 书号 ......

sql查询,nolock写还是不写,这是一个问题

在做过的很多项目中,发现大家不管对什么表,逢select必定加上nolock(或者with(nolock)),好像已经是制度化的一种东西。有领导高人解释说加上nolock可以提高查询速度,不影响对数据表的其他并发操作。  
  但是真有必要每个查询都加nolock吗?个人认为加不加nolock还是值得我们根据实际情况斟酌一番的(至 ......

SQL server2005创建计划任务

我们在开发过程中,经常遇到这样问题,就是要求定期进行数据库的检查,如果发现特定数据,那么就要进行某项操作,这个需求呢,可以利用Windows的计划任务,定期执行某一个应用程序,去检索数据;也可以让程序自己控制。其实SQL Server自己也可以创建计划任务,定期进行执行。如果数据库服务器允许,可以考虑采用这种方式。 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号