标签归档:order by

MySQL order by 多个字段排序举例说明


摘要:
下文通过举例的方式讲述MySQL order by多个字段排序,如下所示:

例:
对如下数据表”maomao”中的字段sortId和qty两个字段进行排序

数据表 maomao

keyId

info

sortId

qty
1

sqlBlog

1

9
2

猫猫小屋

1

8
3

sql爱好者

3

18
4

数据库知识库

4

80

例: 运行以下脚本将出现以下结果

  mysql > select keyId,info,sortId,qty from maomao  order by sortId,qty;
  ---等同于以下脚本
    mysql > select keyId,info,sortId,qty from maomao  order by sortId asc,qty asc;

由于我们指定了排序列,但是没有指定排序方式,所以默认会采用asc排序规则

keyId

info

sortId

qty
2

猫猫小屋

1

8
1

sqlBlog

1

9
3

sql爱好者

3

18
4

数据库知识库

4

80

  mysql > select keyId,info,sortId,qty from maomao  order by sortId desc,qty asc;

按照sortId倒序排列,然后再按照qty顺序排列

keyId

info

sortId

qty
4

数据库知识库

4

80
3

sql爱好者

3

18
2

猫猫小屋

1

8
1

sqlBlog

1

9


order by 注意事项:
1.order by 字段排序,如果未指定排序规则,则按照asc的方式排序
2.order by 如果有多个字段排序,那么首先按照第一个字段的排序规则排序,当第一个排序字段存在重复值时,则按照二个排序规则进行排序
…依次类推,如果有第三个排序字段时,当第二个字段排序规则时,存在第二个排序值相同时,则按照第三个排序字段排列

mssql sqlserver order by 排序字段运行速度慢的处理方法分享


摘要:
下文记载sql脚本中order by关键字导致运行速度慢的处理方法分享,如下所示:
实验环境:sql server 2008 R2


order by关键字是我们在编写sql脚本时,常用的关键字,今天有一个同事编写了一个order by的sql语句,运行速度非常的慢,下面我们将解决此问题的处理方法分享如下:
首先order by 运行慢有以下原因:

1.排序字段上没有设置合适的索引
2.排序字段后加入了asc或desc同索引上的排序方式不同,导致索引失效
3.排序字段中加入了函数导致索引无效
4.涉及多个排序字段,并且这多个字段不在同一张数据表中
5.排序字段是一个text字段,无法运用索引,所以导致效率低下,需调整排序字段类型

根据以上order by 可能导致慢的原因,我们可以进行一些针对性的优化:
1.让order by 涉及字段存在一个数据表中
2.order by字段上建立合适的索引(索引中注意索引键及索引所包含的列)
3.order by 字段上的排序方式同索引上的排序方式须一致
4.禁止对text字段做排序(如果一定要对text字段做排序,请使用varchar(max)或nvarchar(max)对字段进行存储)

mssql sqlserver 数据表按照指定(特定)值排序的方法分享


摘要:
下文讲述将数据表中列值按照指定值进行排序,如下所示
实验环境:sql server 2008 r2


今天接到同事的需求,需要将数据表中,列值为”A”的排第一位,列值为”B”的排第二位,列值为”C”的排第三位,
其它排随机排最后,经过上网查阅各种资料,终于找到了实现此类需求的方法。

实现思路:
采用case when 对排序字段重新编码,然后进行排序

    ---例:对数据表中"列1"值,按照列值等于A 、B、C的方式依次排序
    select [列1],[列2],[列3] ...  
     from [数据表]
      where 1=1 ...   ---检索条件
      order by  
       case  
            when [列1] ='A' then 0
            when [列1] ='B' then 1
            when [列1] ='C' then 2
            else   3
       end
     asc