mysql索引

来源:http://www.cnblogs.com/yg_zhang/archive/2016/09/18/5883457.html
-Advertisement-
Play Games

在mysql 中,索引可以分為兩種類型 hash索引和 btree索引。 什麼情況下可以用到B樹索引? 1.全值匹配索引 比如: orderID="123” 2.匹配最左首碼索引查詢 比如:在userid 和 date欄位上創建聯合索引。 那麼如果輸入 userId作為條件,那麼這個userid可以... ...


在mysql 中,索引可以分為兩種類型 hash索引和 btree索引。

 

什麼情況下可以用到B樹索引?

 

1.全值匹配索引

 

比如:

orderID="123”

 

2.匹配最左首碼索引查詢

 

比如:在userid 和 date欄位上創建聯合索引。

那麼如果輸入 userId作為條件,那麼這個userid可以使用到索引,如果直接輸入 date作為條件,那麼將不能使用到索引。

 

3.匹配列首碼查詢

比如: order_sn like ‘134%' 這樣可以使用到索引。

 

4.匹配範圍值查詢

createTime>'2015-01-09’ and createTime<'2015-01-10'

 

5.精確匹配左前列並範圍匹配另外一列

比如:

userId=1 and createTime>’2016-9-18’

 

6.只訪問索引的查詢,稱為覆蓋索引,及索引包括查詢列的數據。

 

BTREE索引的限制

 

1.如果不是按照索引的最左列開始查找,則無法使用索引。

比如創建聯合索引:

orderId ,createTime 欄位創建聯合索引,如果只是輸入 createTIme的條件,沒有orderid的條件,那麼將不能使用此索引。

 

2.使用索引時不能跳過索引的列。

三列:

日期,姓名,電話 組成列和索引,如果查詢時 只輸入 日期 和電話,那麼只能使用日期作為索引進行過濾。

 

3.NOT IN 和 <> 操作無法使用索引。

 

4.如果查詢中有某個列的範圍查詢,則其右邊所有列都無法使用索引。

 

hash 索引的特點

 

hash索引是基於hash表實現的,只有查詢條件精確匹配hash 索引中的所有列時,才能使用hash索引。只能是等值查詢。

 

對於hash索引中的所有列,存儲引擎都會為每一行計算一個hash碼,hash索引中存儲的就是hash碼。

 

限制:

1.必須兩次讀取,先讀取hash 找到對應的行,再讀取對應的行數據。

2.hash索引無法用於排序。

3.只支持精確查找,不支持部分索引查找,也不支持範圍查找。

hash衝突:

hash 索引不能使用於選擇性很差的欄位,而要用在比如 選擇性強的列上創建hash索引。

比如:不要在性別欄位上創建hash索引。

 

為什麼要使用索引?

 

1.索引大大減少存儲引擎需要掃描的數據量。索引小於數據大小。

2.索引可以幫助我們進行排序以避免使用臨時表。索引是有順序的。

3.索引可以把隨機的I/0 變為 順序的IO

 

索引是不是越多越好?

1.索引會增加寫操作的成本

2.太多的索引會增加查詢優化器和選擇時間。

 

建立索引的策略

1.索引列上不能使用表達式或函數

比如:

select * from product where to_days(out_date) –to_days(current_date)<=30,out_date為索引列。

改成:

select* from product where out_date<date_add(current_date,interval 30 day)

 

2.索引大小不能超過一定值。

inodb 索引列 大小為 200個長度。

 

3.首碼和索引列的選擇性。

 

create index idx_NAME  on table (account);

 

4.聯合索引

如何選擇索引列的順序。

1.經常會被索引的列。

2.選擇性高的里的列的優先。

3.對小的列創建索引。


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

-Advertisement-
Play Games
更多相關文章
  • enq: TX - row lock contention等待事件,這個是資料庫裡面一個比較常見的等待事件。enq是enqueue的縮寫,它是一種保護共用資源的鎖定機制,一個排隊機制,先進先出(FIFO)。enq: TX - row lock contention等待事件,OACLE將其歸類為app... ...
  • 1.首先先看下什麼是MySQL。 MySQL是一個關係型資料庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下產品。MySQL 最流行的關係型資料庫管理系統,其開放源碼這一特點,使得一般中小型網站的開發都選擇 MySQL 作為網站資料庫。 2、安裝。 安裝參考:http:// ...
  • 在取消執行 Restore HeaderOnly 命令時,發現取消不了,Session長時間處於PARALLEL_BACKUP_QUEUE 等待狀態。 官方文檔:Occurs when serializing output produced by RESTORE HEADERONLY, RESTOR ...
  • https://www.sitepoint.com/cursors-mysql-stored-procedures/ After my previous article on Stored Procedures was published on SitePoint, I received quite ...
  • 在Ubuntu 下配置 Mysql 的字元編碼。安裝完 Mysql 後,系統預設的字元編碼是 latin1 ,輸入的是中文,可是輸出卻是一堆亂碼。現在要做的就是把 Mysql的預設字元編碼設置為支持中文的編碼,如 GBK、GB23112、等。 說正經的,我大天朝程式員開發麵臨的兩座智障大山是編碼問題 ...
  • 好記心不如爛筆頭,很多東西當時沒記下來,過了就忘了,下次用到時又得浪費好多時間才能解決。今天又遇到修改MySQL預設字元集編碼的問題,折騰了半天解決了,趕快記錄下來,以後就不用每次折騰了。 查看MySQL字元集的命令是“show variables like '%char%';”。 以MySQL5. ...
  • 這是如何使用SQL server來 編寫 資料庫 表的 操作方式 學習要點: SQL之-建庫、建表、建約束、關係SQL基本語句大全.txt舉得起放得下叫舉重,舉得起放不下叫負重。頭要有勇氣,抬頭要有底氣。學習要加,驕傲要減,機會要乘,懶惰要除。人生三難題:思,相思,單相思。SQL之-建庫、建表、建約 ...
  • 目錄: Prerequisites 集群配置規劃 創建域控伺服器 polybase install firewall config 集群配置 刪除計算節點 install Prerequisites Microsoft .NET Framework 4.5 Oracle Java SE RunTim ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...