數據庫優化提速(二)排序優化之搜索大數據酒店,進銷存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
英文地址,請注明出處:http://en.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;并給出關鍵代碼定位與“為…