mysql檢視索引檔案內容 mysql的索引內容

2021-10-17 17:41:42 字數 4161 閱讀 4592

1.索引的作用主要是加速查詢

2.索引的的分類有幾類分別為主鍵索引,唯一索引,普通索引和聯合索引

主鍵索引:主要是主鍵的作用,主鍵不能為空且不能重複,最後有加速查詢的功能

唯一索引:它分為兩部分,乙個是唯一約束,乙個是索引,

普通索引:它就是加速查詢,對資料沒有什麼要求,

聯合索引:把多列組合成乙個整體,當作乙個索引,一般情況下都是聯合主鍵,聯合唯一和聯合普通索引(把多列組合在一起設定它們為乙個普通索引,叫聯合普通索引)

3.索引能加速查詢的然因是一旦建立索引,它就會自動建立乙個額外檔案(某種格式儲存),然後在進行索引查詢時,先在該檔案中找到要的資訊,然後根據select要顯示的內容,在要查詢表中尋找資訊.而如果沒有索引,它會從頭到尾依次查詢一遍.所以索引能節省時間.但是建立了索引,在對錶進行增刪改的時候,就有些浪費時間了,因為對錶進行操作時,還要對相應的額外檔案進行操作.

4.建立額外檔案中的格式儲存方式分為hash索引和btree索引.預設是btree索引的型式儲存的.

hash索引:它一般在單值查詢的時候很快,在範圍查詢的時候很慢,原因是hash索引是無序的.hash索引的儲存結構是有兩列,一列放hash值,一列放該hash對於表中索引值所在的儲存位置(或是儲存路徑)

btree索引:它是以二叉樹結構儲存的資料結構.如下圖

索引的建立和刪除:

建立索引: 形如  create  index  索引名  on  表名a(列名a)  表示給a表的a列建立普通索引.如:create  index   ix_name  on userinfo3(email)  表示給userinfo3表中的email列建立了普通索引.

如果在index前加unique  就是建立唯一索引,

即create  unique  index    索引名  on  表名a(列名a)  表示給a表的a列建立唯一索引.

如果在表名a(列名a)的括號內新增多列如(列名a,列名b)  就是聯合普通索引,

即  create index   索引名  on  表名a(列名a,列名b) 表示給a 表的a列和b列聯合在一起建立乙個普通索引,即聯合普通索引.一般是通過and連線起來這兩列進行索引查詢的,也可以只通過a列進行索引查詢,但是不能只通過b列進行索引查詢.這種現象叫最左字首匹配. 聯合索引遵循最左字首匹配,即只要出現最左邊的那一列,就能進行聯合索引查詢.

如create  index ix_name_email  on  userinfo3(name,email,age)  給usrinfo3表中的name,email,age等列建立乙個聯合普通索引,

select  *  from  userinfo3  where name=』alex』;能進行聯合索引

select * from  userinfo3  where  name=』alex』 and age=32 ;能進行聯合索引

select  *  from  userinfo3  where  email=』[email protected]』  ;不能進行聯合索引,因為沒有name列.

刪除索引:drop index  索引名 on  表名   刪除普通索引

drop  unique  index    索引名   on  表名   刪除唯一索引

索引中的兩個索引名稱:覆蓋索引和索引合併.

覆蓋索引:在索引檔案中直接獲取資料,即select  的和通過索引查詢的是同樣的內容

select  id   from userinfo3  where  id >3000;

索引合併:指的是把多個索引聯合起來進行查詢,如下,其中name是索引,email也是索引.select   * from userinfo3 where  name=』alex』   and email=』[email protected]

注:聯合索引的效率>索引合併的

對應要進行頻繁查詢的列,應該建立索引,然後進行索引查詢.在進行索引查詢時,只有命中索引才能進行索引查詢.有以下幾種情況是不能命中索引的like  『%xx』  模糊匹配不能進行索引查詢,我們應該匯入第三方模組進行

使用函式,在where條件中對索引列進行使用函式,也不能進行索引查詢

有or  的情況 如  select * from   t1   where   id  =1 or  name =』alex』  name不是索引,所以不能進行索引查詢

型別不一致,如列是字串型別,但是判斷條件的值不是字串型別,也不能進行索引查詢

!=   在條件判斷**現!=時,不走索引,但是主鍵例外

>或時,也不走索引,但是當主鍵或索引是整數型別時,可以走索引

order   by  一般情況下出現order  by的時候不走索引,但是當對索引排序時進行索引覆蓋走索引,如果是對主鍵排序,則走索引

聯合索引(組合索引)最左字首

8.判斷是否走索引的方法(一般正確)

通過explain  +select語句,explain的作用是預估其後跟的select語句的查詢快慢.

all 

explain  select  * from  userinfo3  where name=』alex』

type:all(全表掃瞄,即沒走索引)

type:const(走索引最快,查詢的最多有乙個匹配行)

explain       中type  =all,表示

type=const表示

查詢結果中主要看id和type,id中的值表示預估的select語句有幾個,type中的值表示該select語句是否走了索引,一般情況下,走索引的比沒走索引的快

9.通過建立索引,然後命中索引,就能進行select語句的優化,提高查詢效率.所以在寫查詢語句時,對查詢的語句通過explain預估該查詢語句是否走了索引,然後看看是否犯了沒命中索引的8種情況,最後對查詢語句進行優化.

10.慢日誌查詢  ,對於慢日誌,要注意三點:1.執行時間》10 2. 未命中索引  3.日誌檔案路徑  在mysql中通過show variables   like  『%query%』 查詢到mysql的當前配置資訊,主要看slow_query_log  檢視是否開啟慢日誌記錄

long_query_time   時間限制,檢視最長查詢時間,一旦超過此時間,則記錄

slow_query_log_file      檢視慢日誌檔案及路徑

通過show   variables like  『%queries%』查詢是否記錄索引設定資訊.

log_queries_not_using_indexes     是否記錄使用索引進行查詢的情況

修改當前配置:set  global   變數名=值

在配置檔案中進行修改(它是在服務端進行的)

mysqld  --defaults-file=』d:\mysql.conf』  表示按配置檔案的內容,啟動mysql服務

在mysql.conf中設定配置資訊:

slow_query_log=on

slow_query_log_file =

mysqld  --defaults-file=』 d:\program files(x86)\mysql\mysql-5.7.16-winx64\my-default.ini』

』 d:\program files(x86)\mysql\mysql-5.7.16-winx64\my-default.ini』它是mysql服務端的預設配置檔案

注意: 修改配置檔案之前,要把配置檔案進行備份.     修改配置檔案之後,需要重啟服務,即如果對mysql.conf的內容進行修改了,就要從新執行mysqld  --defaults-file=』d:\mysql.conf』

11.分頁  使用limit

1)select  * from  userinfo3 limit  20,10; 表示從頭掃到20行的位置,然後從它開始取10行顯示;這種從頭開始掃的方式進行分頁效率很低

2)分頁進行優化的方式有,1.不讓看,即有些頁碼掩藏,2.在索引表中掃

在索引表中掃的a.記錄當前頁的最大或最小id

#max_id

#min_id

select * from userinfo3   where id>max_id   limit   10;表示先定位到id的位置.然後從該位置開始取10行

select  *  from userinfo3 where id   in(

select  id  from  (select id from   userinfo3 where  id>max_id  limit30)  as n  order  by n.id  desc  limit  10)

參考鏈結

mysql的索引檔案 MySQL索引實現

摘自 在mysql中,索引屬於儲存引擎級別的概念,不同儲存引擎對索引的實現方式是不同的,本文主要討論myisam和innodb兩個儲存引擎的索引實現方式。myisam索引實現 圖8這裡設表一共有三列,假設我們以col1為主鍵,則圖8是乙個myisam表的主索引 primary key 示意。可以看出...

mysql載入索引檔案格式 Mysql索引型別

圖示中左邊為clustered 形式存放的primary key,右側則為普通的b tree 索引。兩種索引在root node 和branch nodes 方面都還是完全一樣的。而leaf nodes 就出現差異了。在primary key中,leaf nodes 存放的是表的實際資料,不僅僅包括...

索引檔案構成

1 索引檔案 索引檔案由主檔案和索引表構成。主檔案 檔案本身。索引表 在檔案本身外建立的一張表,它指明邏輯記錄和物理記錄之間的一一對應關係。2 索引表組成 索引表必須按主關鍵字有序,而主檔案本身則可以按主關鍵字有序或無序。3 索引順序檔案和索引非順序檔案 1 索引順序檔案 indexed seque...