mysql如何实现多字段排序

等一下,上周我帮我表弟搬家了。
我为这个人付了8 00块钱。
他非常敏捷。
搬了客厅的沙发后,我把书架上的书按颜色整理起来。
红色在左边,黄色在​​右边,蓝色在中间。
我一边搬一边说:这本书乱七八糟,下次就很难找到了。
当时我就觉得这可能和MySQL的排序类似。
当字段排序时,搜索速度会更快。

想一想。
当你搬家时,它全都混在一起了,而且没有按颜色排序,当你的表弟说,“你需要了解 MySQL,你需要了解它”时,你将不得不阅读它相当长的一段时间。
这相当于扫描整个表而不添加任何索引。
我表弟家里有很多书,书架很窄。
进行所有手动排序比对数据库文件进行排序要慢。

那天,对方还开玩笑说,他在帮忙搬家的时候,一位老太太非要他把1 9 7 8 年到2 02 3 年出版日期的书整理一下。
哥哥握着我的手说,这是颠倒的。
这位女士看上去很担心。
我很快说:“如果我们按照书名的第一个字母来组织这些书呢?”后来哥哥才发现书名是按首字母从A到Z排列的,就像学生按年级排列一样。

突然,我想到一个想法:NULL值是否被当作书架上缺角的书一样对待?有些书没有封面,有些书没有封底,有些根本没有出版日期。
如果所有东西都堆积起来,搬家时就得单独运输。
我表弟家有一本书缺了一角。
他总是说:“这本书缺了点东西,我读起来总觉得不完整。
”我建议他:“你为什么不按发布日期来整理它们,把缺失的部分放在底部呢?”表弟想了想,“好吧,那至少我知道哪些书该扔掉。

表弟搬家后,老婆总是说:“下次搬家的时候,别再找那个年轻人了,他手脚太快了,一个字都看不懂。
”我嘲笑她。
“我连书名都不知道,怎么组织呢?”她着急:“我认识作家!”我意识到为了下订单,我必须了解要求。

事后看来,我从杂乱的书架上学到的教训比在实验室中调试 SQL 执行计划更深刻。
复合索引就像书架网格。
(grade,score)表示网格先按年级划分,再按分数排序。
如果写成(分数,等级),就好像先按颜色排序,再按书名排序,这是完全错误的。

我实验室的 SQL 测试表有 2 00,000 行,每次排序我必须等待 1 0 分钟。
在上次优化过程中,我们将索引从单列改为复合索引,执行时间立刻从1 0分钟下降到3 秒。
以前很乱,就像我表弟的书架一样,但现在它是按颜色组织的,所以找书要快得多。

但是当我那天调试时,我发现有些查询仍然使用文件排序,即使它们已明确索引。
我想知道索引顺序是否错误。
后来我改变了场序,确实加快了速度。
在书架上就像书架上有一本书一样。
先按年级排序,再按分数排序。
如果先按分数排序,同年级的学生还得再比较分数。

表弟搬家后,我向他推荐了“书架整理器”,一个整理工具。
这个小机器人可以自动按颜色、尺寸和出版日期对书籍进行排序。
他说下次搬家的时候会尝试一下。
我笑道:“这个机器人整理书籍不就是像MySQL一样加了索引吗?”他愣了一下,道:“怎么相似?”
正当他试图解释索引和书架的异同时,他的手机突然响了。
表弟拿起电话,说:“是啊是啊,我明天就要搬家了,今天我和老婆要买家具。
”看着满屋子堆满的包装纸,我突然想到:“分类就像搬家,必须在弄乱之前使用它。

MySQL 8.0 中,union 查询结果排序与 union 顺序不一致,如何解决?

兄弟你好!说起来:我曾经被MySQL8 .0中的这个UNION查询排序坑给骗了。
此时我手头上有很多文章,需要根据文章标题中的关键词进行排序和展示。
因此,当我执行UNION操作时,排序完全混乱了。

今年夏天,我手头上有一个项目,涉及从文章表中过滤出符合某些条件的内容。
我编写了三个 SELECT 语句,然后使用 UNION 组合结果。
在对结果进行排序时,我注意到它们并不是按照我编写的 UNION 的顺序排列的,而是完全随机排序的。

我当时气得差点毁了数据库。
在网上搜索了一段时间,发现MySQL 8 .0改变了排序逻辑,默认按照查询条件匹配级别排序,而不是UNION顺序。

该怎么办?我首先想到的是 CASEWHEN 语句,就像你提到的方法 1 一样。
我向每个 UNION 子查询添加了一个优先级字段,然后按该优先级排序。
然后结果就按照我想要的顺序出现了。
我记得当时我很高兴,因为我终于得到了它。

但是,后来我们遇到了类似的情况,被要求按照匹配关键词的数量进行排序。
当时我就想到了方法2 ,用CASEWHEN统计每篇文章中匹配关键词的数量,然后按照这个数量进行排序。
这个方法也不错,可以让我更好的控制排序逻辑。

其实这些方法都是我在项目中通过努力学到的。
这个数据库确实充满了陷阱,所以要小心。
记得有一次写UNION的时候以为用UNIONALL会更快,但是运行起来效率就下降了。
就在那时我意识到UNION和UNIONALL各有各的用途,并不一定在所有情况下都使用UNIONALL。

嘿,说起这个我就哭了。
但这些经历也让我学到了很多知识。
如果以后遇到类似的陷阱,至少不要惊慌。
嘿兄弟,你在这方面有什么特别的经验或陷阱吗?欢迎分享出去,也许可以帮助到更多的人!