幾個常見的Mysql索引問題

来源:https://www.cnblogs.com/Xjng/archive/2019/04/16/10717476.html
-Advertisement-
Play Games

1. 選擇性較低的列是否適合加索引? 索引選擇性等於列中不重覆(distinct)的行數量(也叫基數),與記錄總數的比值。範圍在0 1之間。數值越大,索引越快。 例如主鍵是唯一的,不重覆的,所以選擇性=1。 常見的選擇性較低的列,例如是否熱門,要不1,要不0。選擇性等於2/記錄總數,所以是非常低的。 ...


1. 選擇性較低的列是否適合加索引?

索引選擇性等於列中不重覆(distinct)的行數量(也叫基數),與記錄總數的比值。範圍在0-1之間。數值越大,索引越快。
例如主鍵是唯一的,不重覆的,所以選擇性=1。
常見的選擇性較低的列,例如是否熱門,要不1,要不0。選擇性等於2/記錄總數,所以是非常低的。

而這種列適合加索引嗎?
答案是要區分看待:
假如表中是否熱門is_hot=1的行有100行,is_hot=0的行有100w行。
那麼
如果需求是查詢is_hot=1的行,我們設置索引idx(is_hot)是有用的
如果需求是查詢is_hot=0的行,我們設置索引就沒什麼用了。

測試:
100w的表,type=1的有11行,其他都是type=2
沒有設置type索引,搜索type=1,要檢索100w行,也就是全表掃描,用時0.7s
加了type索引,搜索type=1,只要檢索11行,用時0.04。搜索type=2,也是要檢索100w行,用時0.7s,也是差不多全部掃描

2.Mysql的索引是否會自動加上主鍵

假如ID是主鍵,索引a(SongType)和索引b(SongType,ID)是否等價,也就是Mysql是否會為索引加上主鍵ID?
答案是不會的

測試:
有100w數據,前50w SongType=1,後49w SongType是2,最後1w SongTYpe=1,ID是主鍵
有索引a(SongType) 。
sql :select * from table where id>500000 and SongType=1
會使用主鍵索引,需要檢索行50w行。用時0.5s
加索引b(SongType,ID)後,會使用索引b,只需要掃描1w行數據。用時0.02s
所以索引a,並不會包含主鍵

3. 多列排序時使用索引的坑

mysql文檔

A key_part specification can end with ASC or DESC. These keywords are permitted for future extensions for specifying ascending or descending index value storage. Currently, they are parsed but ignored; index values are always stored in ascending order.

根據Mysql文檔的說明,創建索引的時候,可以加上asc或者desc,例如:add index idx(a asc,b desc).但是實際Mysql是會忽略的(好坑。。。)好像8.0版本之後支持desc了。

這會有什麼影響呢?

假如有列test1和test2,都是int類型。

我們創建索引`idx1 (test1,test2)`,
假如我們要按test1和test2排序,例如SQL

explain select * from table order by test1 ,test2 limit 1;

可以使用索引的排序:

  • order by test1
  • order by test1 desc
  • order by test1,test2
  • order by test1 desc,test2 desc

不可以使用索引的排序:

  • order by test1,test2,desc
  • order by test1 desc,test2

因為索引不支持desc,所以多列的索引是按全部列的升序存儲的。所以只排序一列,全部列升序,全部列降序,都能用索引。但是第一列用升序,第二列用降序,或者第一列降序,第二列用升級,都不能使用索引。

未經同意,請不要轉發


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

-Advertisement-
Play Games
更多相關文章
  • 1.查看資料庫的基本語句:show databases; 2.選擇相應的資料庫進入語法:use 資料庫名; 3.查看資料庫中的表語法:show tables; 4.查看表的基本結構語句:desc 表名; 5.修改表名:alter table 舊表名 rename to 新表名; 6.修改欄位的數據類 ...
  • sqlplus /nolog 回車 conn / as sysdba 回車 startup 回車(如果被告知已啟動,應先執行 shutdown immediate 回車) ...
  • 一、事務概念 事務就是一個程式執行單元,裡面的操作要麼都做,要麼都不做。 二、事務特性 事務有四個非常重要的特性(ACID): 原子性(Atomicity):事務是不可分割的整體,所有操作要麼全做,要麼全不做;只要事務中有一個操作出錯,回滾到事務開始前狀態,即之前已執行的操作無效。 一致性(Cons ...
  • IDEA 安裝配置可視化 MongDB 插件 1、安裝MongoDB插件 打開 IDEA ,file --> settings --> plugins,在右邊搜索欄中輸入Mongo,點擊 Mongo Plugin 下的 Install ,安裝完後點擊重啟。 2、添加連接 第一步安裝好後,在idea右 ...
  • [TOC] 一、安裝單實例 1、升級openssl "openssl升級" 2、替換軟體源 3、root 用戶ssh遠程登錄 4、mysql需要安裝的包 5、navicate 連接虛擬機mysql 6、安裝mysql utilities ==最好源碼安裝== 二、安裝多實例 1、目錄結構 2、腳本語 ...
  • 使用分組、聚合和映射-歸併 MongoDB的強大功能之一,是直接在伺服器對文檔的值進行複雜的操作,而不用先發文檔發送到客戶端在進行處理。 結果分組 對大型數據集進行查詢操作時,通常會根據文檔的欄位值對其進行分組。這可以在取迴文檔後通過代碼來完成,但在伺服器端查找的同時進行分組效率跟高。 要將查詢結果 ...
  • bsondump命令是將BSON格式的文件轉換為可讀性更強的文件格式,例如轉為為JSON 格式的文檔,bsondump預設轉換為json格式的文檔。 當通過mongodump命令進行備份時,如果有參數 --oplog,會在備份路徑下產生一個oplog.bson文件。 這個文件是bson格式,沒有辦法 ...
  • [20190416]exclusive latch測試腳本.txt--//昨天做了shared latch的測試腳本,今天完善exclusive latch測試腳本,上個星期的測試我是手工執行的.--//今天寫一個腳本驗證看看.相關鏈接:http://blog.itpub.net/267265/vi ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...