SQL的ORDER BY 的使用注意

11 篇文章 0 订阅

项目中我写了一条sql语句

SELECT
    s.student_number AS studentNumber,
    s. NAME,
    s.sex,
    class. NAME AS studentClass,
    m. NAME AS professiona,
    d. NAME AS department,
    c. NAME AS college
FROM
    student_info AS s,
    major AS m,
    department AS d,
    college AS c,
    class
WHERE
    s.student_number NOT IN (
        SELECT
	    b.student_id
	FROM
	    bed AS b
	WHERE
	    b.student_id IS NOT NULL
    )
AND s.class_id = class.id
AND class.major_id = m.id
AND m.department_id = d.id
AND d.college_id = c.id
ORDER BY s.student_number
LIMIT 0,13

乍眼一看,是没有问题的,在数据量少的时候也是可以跑得动,当我们拿到实际项目使用中的时候发现,sql跑不动了,按照我的想法是,因为在外部进行了多重的关联,当数据量大的时候关联的数据也需要排序。基于这一点我就把sql修改为下面的形式,然后sql就能跑了。

SELECT
    s.student_number AS studentNumber,
    s. NAME,
    s.sex,
    class. NAME AS studentClass,
    m. NAME AS professiona,
    d. NAME AS department,
    c. NAME AS college
FROM
    student_info AS s,
    major AS m,
    department AS d,
    college AS c,
    class
WHERE
    s.student_number NOT IN (
        SELECT
	    b.student_id
	FROM
	    bed AS b
	WHERE
	    b.student_id IS NOT NULL
	ORDER BY
	     b.student_id
    )
AND s.class_id = class.id
AND class.major_id = m.id
AND m.department_id = d.id
AND d.college_id = c.id
LIMIT 0,13

通过这个事件我忽然想到,sql的排序不一定也不能完全放在最外面,当数据量大或外连接多的时候,能早一步进行排序就早一步进行排序,这样也算是对sql的一种优化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值