MySQL8新增降序索引

来源:https://www.cnblogs.com/taojietaoge/archive/2022/05/08/16223469.html
-Advertisement-
Play Games

MySQL8新增降序索引 桃花塢里桃花庵,桃花庵里桃花仙。桃花仙人種桃樹,又摘桃花賣酒錢。 一、MySQL5.7 降序索引 MySQL在語法上很早就已經支持降序索引,但實際上創建的卻仍然是升序索引,如下MySQL 5.7 所示,row2欄位降序,但是從show create table看 row2  ...


MySQL8新增降序索引

 

  桃花塢里桃花庵,桃花庵里桃花仙。桃花仙人種桃樹,又摘桃花賣酒錢。

 

一、MySQL5.7 降序索引

MySQL在語法上很早就已經支持降序索引,但實際上創建的卻仍然是升序索引,如下MySQL 5.7 所示,row2欄位降序,但是從show create table看 row仍然是升序的。

CREATE TABLE t_desc_index ( row1 INT, row2 INT, INDEX idx_row1_row2 ( row1, row2 DESC ) );

SHOW CREATE TABLE t_desc_index 

二、MySQL8 降序索引

在MySQL8中,以同樣的方式創建降序索引row2,show create table查看。

SHOW CREATE TABLE t_desc_index\G 看到 KEY ‘idx_row1_row2’(‘row1’,’row2’ DEDC)

8.0中可以看到,row2欄位降序,此時為降序索引。

三、新增降序索引有何好處?

通過降序索引在執行計劃中的表現,在 t_desc_index 表插入10萬條隨機數據,在通過 explain 查看各自版本的執行計劃。

1、數據準備

插入99999條隨機數據,存儲過程

CREATE PROCEDURE insert_t_desc_index ( ) BEGIN
DECLARE
    i INT DEFAULT 1;
WHILE
    i < 100000 DO
    INSERT INTO t_desc_index SELECT
    rand( ) * 100000,
    rand( ) * 100000;

SET i = i + 1;

END WHILE;
COMMIT;
END;

調用存儲過程插入數據。

CALL insert_t_desc_index ( );

2、測試

查詢五條數據,根據索引 idx_row1_row2 按照降序順序排序。

explain select row1, row2 from t_desc_index order by row1 , row2 desc limit 5;

從 explain 解釋可以看出,查詢五條數據,需要掃描96491 行數據,並且使用了filesort

降序索引只是對查詢中特定的排序順序有效,即升序索引降序排序反無效,降序索引升序排序無效。如果使用不當,反而查詢效率更低,比如上述查詢排序條件改為

order by c1 desc, c2 desc

這種情況下只需要掃描 行數據

explain select row1, row2 from t_desc_index order by row1 desc , row2  desc limit 5 ;

綜上可知,MySQL8新增降序索引後可以真正意義上的增加查詢效率。

 

 

 

桃花塢里桃花庵 桃花庵里桃花仙 桃花仙人種桃樹 又摘桃花賣酒錢

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、回調函數 關於回調函數,在之前的文章《回調函數》已經詳解講解過了,這個文章不再講解,不太懂的同學請看之前的文章《回調函數》。在之前講解回調函數中就使用串口作為示例,使用回調函數可以方便封裝通訊庫,晶元/模塊廠家的SDK和部分開源庫經常這樣做,這樣可以實現模塊間的解耦,模塊化編程。 這篇文章主要講 ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是i.MXRT1xxx系列MCU時鐘相關功能引腳作用。 如果我們從一顆 MCU 晶元的引腳分類來看晶元功能,大概可以分為三大類:電源、時鐘、外設功能。作為嵌入式開發者,大部分時候關註得都是外設功能引腳,而對於時鐘相關引腳往往不太在意,其實 ...
  • Linux小白,可能描述的不規範,請見諒 事情經過 有一次我樹莓派由於某種原因導致桌面某個組件卡死,於是我就在跳出的“未響應”(類似windows的No Response視窗)點擊'End Process'後,桌面的菜單欄還在,但是圖標不見了。 這時我右鍵點擊桌面,發現右鍵菜單與之前截然不同(應該是 ...
  • CH32V103C8T6是沁恆的RISC-V內核MCU, 基於RISC-V3A處理器, 內核採用2級流水線處理,設置了靜態分支預測、指令預取機制,支持DMA. 需要準備一片 WCH-Link 用於燒錄沁恆的晶元. 市面上有相容 DAP-Link 和 WCH-Link 的燒錄器. 註意看燒錄器的說明,... ...
  • UART,全稱Universal Asynchronous Receiver Transmitter,通用非同步收發器,俗稱串口。作為最常用的通信介面之一,從8位單片機到64位SoC,一般都會提供UART介面。 ...
  • Mysql複習的一個小總結,用xmind寫的。(字數沒有都不給我發博客😹) 下麵是一些備註 子查詢 MySQL子查詢稱為內部查詢,而包含子查詢的查詢稱為外部查詢。 子查詢可以在使用表達式的任何地方使用,並且必須在括弧中關閉。 視圖 基本語法可以使用 CREATE VIEW 語句來創建視圖。 語法格 ...
  • ​大數據概述 在大數據這個概念興起之前,信息系統存儲數據的方法主要是我們熟知的關係型資料庫,關係型資料庫,關係型模型之父 Edgar F. Codd,在 1970 年 Communications of ACM 上發表了《大型共用資料庫數據的關係模型》的經典論文,從此之後關係模型的語義設計達到了 4 ...
  • 一、下載安裝IDEA IDEA2020.2.3版本:https://www.cnblogs.com/liugp/p/13868346.html 最新版本安裝詳情請參考:https://www.jb51.net/article/196349.htm 二、搭建本地hadoop環境(window10) 可 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...