sql 数据量很大 ,为啥加了order by速度变慢了?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 数据量很大 ,为啥加了order by速度变慢了?相关的知识,希望对你有一定的参考价值。

order by在where后面,通过where条件把数据检索出来,而order by是把检索出来的数据进行排序,所以加了order by会慢一点。

拓展回答:

SQL语言的组成:

    一个SQL数据库是表(Table)的集合,它由一个或多个SQL模式定义。

    一个SQL表由行集构成,一行是列的序列(集合),每列与行对应一个数据项。

    一个表或者是一个基本表或者是一个视图。基本表是实际存储在数据库的表,而视图是由若干基本表或其他视图构成的表的定义。

    一个基本表可以跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表。每个存储文件与外部存储上一个物理文件对应。

    用户可以用SQL语句对视图和基本表进行查询等操作。在用户角度来看,视图和基本表是一样的,没有区别,都是关系(表格)。

    SQL用户可以是应用程序,也可以是终端用户。SQL语句可嵌入在宿主语言的程序中使用,宿主语言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada语言等。SQL用户也能作为独立的用户接口,供交互环境下的终端用户使用。

参考技术A

rder by 是查询排序,你想啊,只把符合条件的数据都找出来和要把数据找出来还要按某一列进行按大或小排序哪个用的时候多啊。
所以数据量大时不排序肯定是省时间的。

如果刚开始的数据库没有按照你想要的顺序排列的话,用order by的时候就会使得数据库中的数据重新排列,这样执行起来就慢了,况且表中的记录也蛮多的,如果记录较少的话,就没什么快慢之分了

sql ORDER BY 多个字段,排序变慢几十倍,求解?

数据表7万+条数据,sql 单个字段 ORDER BY都是8-10毫秒,但2个字段并列查询排序速度慢了几十倍,倒是是什么问题?其中houseid 为主键,push 有索引。查询语句及耗时如图所示。

SQL 中使用order By后,查询慢,加上主键 和 需要排序的字段组合排序 速度有很大的提升
在SQL Server查询数据测试,数据约三万条, 数据字段以时间倒序排序,
sql:
select ID, column1,column2,column3,record_date from table where ...... order by record_date desc
此时查询数据需要15秒左中 ,将orderby 修改为 order by ID desc,record_date desc 后,查询的数据一秒不到即可查询出来

在linq中,排序的时候,一定要用new 排序的对象,不然ID 将不会被加入到SQL中

linq:
var t = from a in t where ......select a;
t = t.orderby(t=>t.ID).orderby(t=>t.record_date) 此处的ID在解释成SQL时,不会在SQL中
应写为:
t = t.orderby(t=>newt.ID,t.record_date)
参考技术A 可以把需要group by的字段加上联合索引,需要注意前后顺序:搜索结果范围小的放前面,范围大的在后,如:
ALTER TABLE h_house ADD INDEX idx1(push,hourseid);

以上是关于sql 数据量很大 ,为啥加了order by速度变慢了?的主要内容,如果未能解决你的问题,请参考以下文章

高手们 为啥数据库查询语句加了order by 变得很慢 表中有六千多条记录 现在打开很慢 啥原因

mysql查询性能问题,加了order by速度慢了

sql ORDER BY 多个字段,排序变慢几十倍,求解?

求sqlserver join 后order by 速度慢的解决办法

mysql 数据量大 加了索引 聚类查询还是慢

Oracle中,为啥同样的SELECT查询语句,加了CREATE TABLE AS后速度更快了?