问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

数据库中 order by 后面使用多个字段的问题

发布网友 发布时间:2022-04-28 23:38

我来回答

2个回答

懂视网 时间:2022-05-05 20:00

初步看改语句,非常简单,根据products_viewed(产品被查看次数)倒序排序,再根据products_name(产品名字)排序!在products_vie

某前台sql语句,简化后如下
SELECT products_name,products_viewed FROM `products_description`
ORDER BY products_viewed DESC,products_name LIMIT 0,20;

该语句经常大批量出现在慢日志中!

初步看改语句,非常简单,根据products_viewed(产品被查看次数)倒序排序,再根据products_name(产品名字)排序!在products_viewed和products_name上分别建立有索引!
但是感觉products_name排序怪怪的!
explain后发现
+----+-------------+----------------------+------+---------------+------+---------+------+-------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------------------+------+---------------+------+---------+------+-------+----------------+
| 1 | SIMPLE | products_description | ALL | NULL | NULL | NULL | NULL | 764370 | Using filesort |
+----+-------------+----------------------+------+---------------+------+---------+------+-------+----------------+

改语句做竟然全表扫描!

mysql的order by语句,,如果在where条件中没有合适的索引选择时,将会选择order by col中的索引作为条件,但是如果是多个order by组合,将会导致放弃使用索引!
和开发以及需求沟通,发现通过名字排序是可以不需要的!
我们去掉order by后面的 products_name!
再次explain后发现已经能够使用索引:
explain SELECT products_name,products_viewed FROM `products_description`
ORDER BY products_viewed LIMIT 0,20;
+----+-------------+----------------------+-------+---------------+-----------------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------------------+-------+---------------+-----------------+---------+------+------+-------+
| 1 | SIMPLE | products_description | index | NULL | products_viewed | 5 | NULL | 20 | |
+----+-------------+----------------------+-------+---------------+-----------------+---------+------+------+-------+

再次对比两次profiling(过程省略),发现第一次损坏大量io和cpu时间Sorting result上!因为该语句为前台语句,有大量查询,优化后,页面打开速度明显提升!

注意:
1. order by m,n 不要轻易写这种语句,一般的order by前面的m才是order by的重点,后面的n为配角,如果没有必要,尽量去掉
2. 参考我的另一篇

linux

热心网友 时间:2022-05-05 17:08

我的理解是数据库中的记录本来是无序的,如果top没有加字段的话,应该是“随机?”选取记录,如果是有字段后面没有排列则选取字段中的前n位,这一部分我没有搞清楚,你需要自己实验下,SQL我只是有理论没用过的说。如果有字段加了orderby后order by OrderDate ,OrderID desc将记录按照OrderDate降序排列,然后再按照OrderID降序排列,然后记录就变成有序的,从而可以选取前n条的记录。
事实上我还没有弄清楚top是选取前N条记录,还是能够自己筛选大小的说。
你自己试验下,就应该能弄清楚了。
按照我的理解,结果都不应该有大的出入的,因为主排序应该是OrderDate,你再求高人现身说法吧
看看这个http://blog.csdn.net/jion_tang88/article/details/7427763来自:求助得到的回答
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
vivox9和x9i有什么区别 ...设置原则跟构造要求。构造柱的设置原则跟构造要求是什么_百度... ...的U型钢筋锚环要几道?在哪里可以找到依据啊 ...月末不含税库存金额1065000元,请计算门店库存天数 公蟹吃什么 公蟹吃什么东西 爬行健身操功能和原理 锻炼爬行的好处有哪些呢 爬行健身法有什么优缺点 檀木如何粘合 成田剑先生还为哪些日本动漫配音,有名一点滴。谢谢了,大神帮忙啊 sql语句order by 用法,自定义规则 ORDER BY的使用 sql里 where和order by一起使用是怎样的顺序 用iTunes 怎么删除照片图库照片 oracle中,还是不甚明白order by和group by的用法 SQL数据库中查询语句Order By和Group By有什么区别 苹果手机怎么连接itunes删除照片 sql里的排序倒序的命令是order by什么 SQL中的group by语句和order by语句怎么用?最好能有个例子 SQL里面的order by语句是干什么用的? SQL数据库中,如何区分查询语句Order By和Group By? 数据库中order by 省略asc 在数据库中order by 和 group by 的区别 在手机百度里看过的东西怎样删除? 怎么可以删除百度上的视频 母刺猬哺乳期吃什么奶水多? 什么网贷容易通过,急用 如何喂养刺猬?它吃什么呀? 有什么网贷简单又快通过 网贷什么容易过 “国”字的笔顺怎么写? 怎么用itunes删除手机里所有的照片 SQL语句 关于order by “国”的笔顺和笔画是什么? 《二虎》txt全集下载 “王”字的笔顺是什么? 王小拼音怎么拼 求一山容二虎by寒梅墨香txt 三字加一笔一共有多少个字? 田字格 王字旁怎么写 二虎温如玉的小说是不是不能看 工字加一笔写出哪些字? 雷霆战将在哪拍的-取景地介绍 求寒梅墨香大大的 一山容二虎!! 元的笔顺怎么写 横店市批下来了吗 大虎二虎的小说是什么名字 三个秦念什么? 浙江横店有可能成为横店市吗? 横店市中心附近有什么酒店,性价比高的?