数据库优化提速(二)排序优化之搜索大数据酒店,进销存AI—仙盟创梦IDE

在 MySQL 数据库管理中,排序操作对于数据的有效展示和分析至关重要。本文将以一个实际的 SQL 查询为例,深入探讨排序优化方案,并结合进销存、酒店、知识库等大数据场景,阐述这些优化策略的应用价值。

原始

SELECT `应用编号`, `应用序列号`, `商家编号`, `店铺编号`, `员工编号`, `用户编号`, `应用分类编号`, `应用名称`, `版本`, `应用标题`, `应用类型`, `应用作者`, `硬件供应商编号`, `硬件供应商代码`, `应用描述`, `应用密码`, `应用代码`, `应用配置`, `应用平台`, `创建时间`, `应用版本`, `应用价格`, `是否仅本人可见`, `应用客户端`, `应用演示`, `应用图标`, `应用销量`, `更新时间`, `页面链接`, `下载链接`, `安卓密码`, `应用代码语法`, `应用提交次数`, `应用状态`, `是否可打开网页预览`, `应用主体`, `系统工作人员编号`, `系统工作人员姓名`, `协同人员`, `系统工作人员 IP`, `供应商商家编号`, `供应商店铺编号`, `是否废弃`, `下载 1 名称`, `下载 1 链接`, `下载 2 名称`, `下载 2 链接`, `下载 3 名称`, `下载 3 链接`, `下载 4 名称`, `下载 4 链接`, `下载提供商`, `应用 AI 权重`, `数据平台`, `数据平台展示编号`, `展示平台`, `关键词`, `公众号`, `微信号`, `网站`, `地址`, `电话`, `QQ`, `真实姓名`, `邮箱`, `是否为代码片段` 
FROM `应用商店应用表` 
WHERE (`应用标题` LIKE '%演示%') 
ORDER BY  `应用销量` desc , `应用销量` desc , `是否废弃` asc, `应用编号` DESC 
LIMIT 0, 2000

大数据优化后

给定的 SQL 查询如下:

sql

SELECT `应用编号`, `应用序列号`, `商家编号`, `店铺编号`, `员工编号`, `用户编号`, `应用分类编号`, `应用名称`, `版本`, `应用标题`, `应用类型`, `应用作者`, `硬件供应商编号`, `硬件供应商代码`, `应用描述`, `应用密码`, `应用代码`, `应用配置`, `应用平台`, `创建时间`, `应用版本`, `应用价格`, `是否仅本人可见`, `应用客户端`, `应用演示`, `应用图标`, `应用销量`, `更新时间`, `页面链接`, `下载链接`, `安卓密码`, `应用代码语法`, `应用提交次数`, `应用状态`, `是否可打开网页预览`, `应用主体`, `系统工作人员编号`, `系统工作人员姓名`, `协同人员`, `系统工作人员 IP`, `供应商商家编号`, `供应商店铺编号`, `是否废弃`, `下载 1 名称`, `下载 1 链接`, `下载 2 名称`, `下载 2 链接`, `下载 3 名称`, `下载 3 链接`, `下载 4 名称`, `下载 4 链接`, `下载提供商`, `应用 AI 权重`, `数据平台`, `数据平台展示编号`, `展示平台`, `关键词`, `公众号`, `微信号`, `网站`, `地址`, `电话`, `QQ`, `真实姓名`, `邮箱`, `是否为代码片段` 
FROM `应用商店应用表` 
WHERE (`应用标题` LIKE '%演示%') 
ORDER BY FIELD(应用类型, '客户端渲染模板', '插件', '微软相关', '芯片相关', 'AI 相关') , `应用销量` desc , `应用销量` desc , `是否废弃` asc, `应用编号` DESC 
LIMIT 0, 2000

多重排序

  • 使用 FIELD() 函数

    • 这是最常用的自定义排序方法,语法如下:

      sql

      SELECT * FROM 表名
      ORDER BY FIELD(字段名, 值1, 值2, 值3, ...);
      

      例如,对 status 字段按 "处理中"、"已完成"、"已取消" 的顺序排序:

      sql

      SELECT * FROM orders
      ORDER BY FIELD(status, '处理中', '已完成', '已取消');
      

      注意:不在列表中的值会被排在最前面(按 NULL 处理)。

    • 使用 CASE 语句


    • 更灵活的方式,可自定义排序权重:

      sql

      SELECT * FROM 表名
      ORDER BY CASE 字段名WHEN 值1 THEN 1WHEN 值2 THEN 2WHEN 值3 THEN 3ELSE 4  -- 其他值的排序位置
      END;
      
    • 结合自定义表或枚举


    • 如果排序规则复杂且频繁使用,可创建一个包含排序规则的映射表,通过 JOIN 实现排序:

      sql

      -- 创建排序规则表
      CREATE TABLE sort_rule (status VARCHAR(20),sort_order INT
      );-- 插入排序规则
      INSERT INTO sort_rule VALUES ('处理中', 1),('已完成', 2),('已取消', 3);-- 关联排序
      SELECT o.* FROM orders o
      LEFT JOIN sort_rule r ON o.status = r.status
      ORDER BY r.sort_order;
      

该查询旨在从 应用商店应用表 中检索应用标题包含 “演示” 的记录,并按特定顺序排序,同时限制返回结果为 2000 条。排序规则包括按特定的应用类型顺序、应用销量降序、是否废弃升序以及应用编号降序。

排序优化方案

  1. 索引优化
    • 单列索引:为 应用标题应用类型应用销量是否废弃 和 应用编号 字段分别创建单列索引。这可以加速 WHERE 子句中的过滤以及 ORDER BY 子句中的排序操作。例如,创建 应用标题 索引:

sql

CREATE INDEX idx_标题 ON 应用商店应用表(标题);

  • 复合索引:考虑到查询中的条件和排序字段,可以创建复合索引。例如:

sql

CREATE INDEX idx_符合搜索 ON 应用列表(标题, 类型, 销量, 作废, id);

复合索引的顺序应与 WHERE 和 ORDER BY 子句中的字段顺序相匹配,以最大程度提高查询性能。

  1. 减少排序字段冗余:查询中 应用销量 降序排序出现了两次,这是不必要的冗余。去除重复的 应用销量 排序字段,简化查询逻辑。

  2. 优化 LIKE 操作LIKE '%演示%' 这种操作在大数据量下性能较差,因为它无法利用索引。如果可能,尽量避免使用前置通配符。若业务允许,可以改为 LIKE '演示%',这样数据库可以使用索引进行快速查找。

  3. 缓存结果:对于不经常变化的数据,可以考虑缓存查询结果。例如,使用 Memcached 或 Redis 等缓存工具,将查询结果缓存起来,下次相同查询时直接从缓存中获取,减少数据库的压力。

大数据场景下的应用

  1. 进销存场景:在进销存系统中,每天可能产生大量的订单、库存变动等数据。假设要查询特定时间段内,按商品类别自定义顺序(如先查询热门类别,再查询普通类别),并按销售量降序排列的商品销售记录。可以运用上述优化方案,为商品类别、销售量等字段创建索引,提高查询效率。同时,由于进销存数据相对稳定,可以定期缓存查询结果,减少数据库负载。
  2. 酒店场景:酒店系统需要处理大量的预订、客房状态等数据。例如,查询特定日期范围内,按房型自定义顺序(如先查询套房,再查询标准间等),并按预订数量降序排列的客房预订记录。通过索引优化和减少排序冗余,可以快速响应用户查询,提高系统性能。此外,对于热门查询(如节假日期间的房间查询),缓存结果可以显著提升查询速度。
  3. 知识库场景:知识库系统存储着大量的文档、文章等信息。当用户查询特定关键词,并按文档类型自定义顺序(如先显示技术文档,再显示用户手册等),同时按浏览量降序排列的文档时,优化排序同样重要。通过合理的索引设计和优化 LIKE 操作,可以提高查询效率,为用户提供更快速的知识检索服务。

通过以上优化方案和在不同大数据场景下的应用,可以显著提升 MySQL 数据库在复杂排序查询下的性能,为各类业务系统提供更高效的数据处理能力。

阿雪技术观


在科技发展浪潮中,我们不妨积极投身技术共享。不满足于做受益者,更要主动担当贡献者。无论是分享代码、撰写技术博客,还是参与开源项目维护改进,每一个微小举动都可能蕴含推动技术进步的巨大能量。东方仙盟是汇聚力量的天地,我们携手在此探索硅基生命,为科技进步添砖加瓦。

Hey folks, in this wild tech - driven world, why not dive headfirst into the whole tech - sharing scene? Don't just be the one reaping all the benefits; step up and be a contributor too. Whether you're tossing out your code snippets, hammering out some tech blogs, or getting your hands dirty with maintaining and sprucing up open - source projects, every little thing you do might just end up being a massive force that pushes tech forward. And guess what? The Eastern FairyAlliance is this awesome place where we all come together. We're gonna team up and explore the whole silicon - based life thing, and in the process, we'll be fueling the growth of technology.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919754.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux之Ansible自动化运维(二)

一、ansible Playbook应用由于服务器数量很多,配置信息比较多,因此可以利用Ansible Playbook编写任务自动化与流程化脚本Playbook 由一个或多个play组成的列表,play的主要功能Ansible中Task定义好的角色,指定剧本对应的服务器组二…

ArrayList线程不安全问题及解决方案详解

问题背景在多线程编程中&#xff0c;我们经常会遇到集合类的线程安全问题。Java中的ArrayList是一个常用的集合类&#xff0c;但它不是线程安全的。当多个线程同时操作同一个ArrayList实例时&#xff0c;可能会出现各种不可预料的问题。问题演示List<String> list new A…

车辆方向数据集 - 物体检测

关于数据集 包含超过50,000 张图像中具有方向的车辆的 50,000 多万个注释。它通过同时提供车辆类别和方向来减少对方向进行分类的辅助神经网络的需求。 预训练权重 我们将继续添加在车辆方向数据集和合成车辆方向数据集上训练的各种对象检测模型。如果您需要一些特定的预训练权…

Nextcloud搭建教程:使用Docker在腾讯云服务器上自建私人云盘

更多云服务器知识&#xff0c;尽在hostol.com你那百兆光纤的宽带。你是否也曾看着自己最珍贵的家庭照片、最私密的个人文档&#xff0c;静静地躺在某个科技巨头的服务器上&#xff0c;感到过一丝丝的不安&#xff1f;你的数据&#xff0c;到底被如何“阅读”和“分析”&#xf…

【操作记录】MNN Chat Android App 构建笔记(二)

&#x1f4d2; MNN Chat Android App 构建笔记 一、背景知识MNN 简介 MNN 是阿里开源的轻量级深度学习框架&#xff0c;支持 Android / iOS / Linux / Windows。提供推理、LLM、Vision、Audio 等模块。Android App 里用到的是 Java JNI 调用 MNN 库。CMake NDK 的作用 CMake&…

如何在 Axios 中处理多个 baseURL 而不造成混乱

网罗开发&#xff08;小红书、快手、视频号同名&#xff09;大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等方…

AP服务发现PRS_SOMEIPSD_00255 的解析

[PRS_SOMEIPSD_00255 ] 「SOME/IP-SD头部的重启标志&#xff0c;对于重启后发出的所有报文&#xff0c;都应设置为 1&#xff0c;直至 SOME/IP头部中的会话 ID (Session-ID) 回绕并因此再次从 1 开始。在此回绕之后&#xff0c;重启标志应设置为 0。」(RS_SOMEIPSD_00006)核心含…

纯手撸一个RAG

纯手撸一个RAGRAG基本流程第一阶段&#xff1a;数据预处理&#xff08;索引&#xff09; - 构建知识库第二阶段&#xff1a;查询与生成&#xff08;推理&#xff09; - 回答问题总结Chunk介绍Chunk框架的介绍Chunk核心概念选择分块策略和框架如何选择分块框架Python代码实现第一…

视觉语言对比学习的发展史:从CLIP、BLIP、BLIP2、InstructBLIP(含MiniGPT4的详解)

前言 本文一开始是属于此文《图像生成(AI绘画)的发展史&#xff1a;从CLIP、BLIP、InstructBLIP到DALLE、DALLE 2、DALLE 3、Stable Diffusion(含ControlNet详解)》的&#xff0c;后独立成本文 第一部分 从CLIP、BLIP1、BLIP2到InstructBLIP 1.1 CLIP&#xff1a;基于对比文本…

HTTP代理与SOCKS代理的区别、应用场景与选择指南

在互联网日常使用与跨境业务中&#xff0c;HTTP代理 和 SOCKS代理 是两种常见的网络代理方式。无论是跨境电商、社交媒体账号运营、数据采集&#xff0c;还是科学访问海外资源&#xff0c;都需要选择合适的代理协议。什么是HTTP代理&#xff1f;定义HTTP代理 是基于 HTTP协议 的…

AI重塑职业教育:个性化学习计划提效率、VR实操模拟强技能,对接就业新路径

职业教育长期面临着一系列问题&#xff0c;包括“统一课程难以适配不同基础学员”、“实操反馈滞后”和“就业技能与企业需求脱节”等。随着人工智能技术的应用&#xff0c;这些传统教学模式正在发生变化。个性化技能培养得以实现&#xff0c;甚至可以提前识别学员的就业短板。…

主题配色下的背景透明度

用 CSS color-mix() 解决背景透明度的痛点 在设计卡片组件时&#xff0c;经常遇到这样的需求&#xff1a;卡片背景需要80%透明度&#xff0c;鼠标悬浮在内部某项时&#xff0c;修改背景色但保持同样的透明度。 问题场景 .card {background: rgba(59, 130, 246, 0.8); /* 蓝色80…

【Python代码】谷歌专利CSV处理函数

以下是一个重构后的高可用、可配置、低耦合的专利CSV处理函数&#xff0c;包含清晰的注释和结构&#xff1a; import csv import pandas as pd from datetime import datetime import os from typing import List, Dict, Any, Optional, Tuple import logging# 配置日志 loggin…

3-2〔OSCP ◈ 研记〕❘ WEB应用攻击▸WEB安全防护体系

郑重声明&#xff1a; 本文所有安全知识与技术&#xff0c;仅用于探讨、研究及学习&#xff0c;严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任&#xff0c;本人不承担任何责任。 如需转载&#xff0c;请注明出处且不得用于商业盈利。 …

PCIe 5.0相比顶级PCIe 4.0有何提升?

还在为PCIe 4.0固态硬盘那7000MB/s的速度沾沾自喜&#xff1f;醒醒&#xff0c;朋友。当很多人还在讨论PCIe 4.0是否“性能过剩”时&#xff0c;真正面向未来的PCIe 5.0已经带着碾压级的实力&#xff0c;来到了我们面前。这不是一次常规的“升级”&#xff0c;更不是英特尔式的…

23种设计模式——适配器模式(Adapter)​详解

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。 &#x1f34e;个人主页&#xff1a;Meteors.的博客 &#x1f49e;当前专栏&#xff1a; 设计模式 ✨特色专栏&#xff1a; 知识分享 &…

Vue3源码reactivity响应式篇之Reactive

概览 vue3中reactive用于将普通对象转换为响应式对象&#xff0c;它的实现原理是通过Proxy和Reflect来实现的。具体的实现文件参见packages\reactivity\src\reactive.ts。本文会介绍reactive的相关api如下&#xff1a; reactive&#xff1a;将普通对象转换为响应式对象readonly…

初识数据结构——Map和Set:哈希表与二叉搜索树的魔法对决

数据结构专栏 ⬅(click) 大家好&#xff01;我是你们的老朋友——想不明白的过度思考者&#xff01;今天我们要一起探索Java中两个神奇的数据结构&#xff1a;Map和Set&#xff01;准备好了吗&#xff1f;让我们开始这场魔法之旅吧&#xff01;&#x1f3a9; &#x1f3af; 先…

Unreal Engine UStaticMeshComponent

UnrealUnreal Engine - UStaticMeshComponent&#x1f3db; 定义&#x1f3db; 类继承⚡ 关键特性⚙️ 常见配置&#x1f6e0;️ 使用方法&#x1f4da; 在 C 中使用&#x1f4da; 在蓝图中使用&#x1f3ae; 典型应用场景&#x1f4da; 常见子类与用途&#x1f4dd; 小结Unrea…

demo 汽车之家(渲染-筛选-排序-模块抽离数据)

效果图展示&#xff1a;代码截图注释详情实现笔记总体目标&#xff08;按需求点对照代码&#xff09;数据模块化、整体渲染框架、筛选/排序的高亮与行为&#xff0c;全部已在 Index.ets CarData.ets 落地。下面按图片需求 2~4 点逐条总结&#xff0c;并给出关键代码定位与“为…