查看索引

站在用戶的角度思考問題,與客戶深入溝通,找到云浮網站設計與云浮網站推廣的解決方案,憑借多年的經驗,讓設計與互聯(lián)網技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網站建設、網站設計、企業(yè)官網、英文網站、手機端網站、網站推廣、國際域名空間、雅安服務器托管、企業(yè)郵箱。業(yè)務覆蓋云浮地區(qū)。
mysql show index from tblname;
mysql show keys from tblname;
· Table
表的名稱。
· Non_unique
如果索引不能包括重復詞,則為0。如果可以,則為1。
· Key_name
索引的名稱。
· Seq_in_index
索引中的列序列號,從1開始。
· Column_name
列名稱。
· Collation
列以什么方式存儲在索引中。在MySQL中,有值‘A’(升序)或NULL(無分類)。
· Cardinality
索引中唯一值的數(shù)目的估計值。通過運行ANALYZE TABLE或myisamchk -a可以更新。基數(shù)根據被存儲為整數(shù)的統(tǒng)計數(shù)據來計數(shù),所以即使對于小型表,該值也沒有必要是精確的。基數(shù)越大,當進行聯(lián)合時,MySQL使用該索引的機 會就越大。
· Sub_part
如果列只是被部分地編入索引,則為被編入索引的字符的數(shù)目。如果整列被編入索引,則為NULL。
· Packed
指示關鍵字如何被壓縮。如果沒有被壓縮,則為NULL。
· Null
如果列含有NULL,則含有YES。如果沒有,則該列含有NO。
· Index_type
用過的索引方法(BTREE, FULLTEXT, HASH, RTREE)。
· Comment
show?index?from?`表名`;
或
show?keys?from?`表名`;
然后看結果中的key_name是否包含你創(chuàng)建的索引名
oracle對于數(shù)據庫中的表信息,存儲在系統(tǒng)表中。查詢已創(chuàng)建好的表索引,可通過相應的sql語句到相應的表中進行快捷的查詢:
1.
根據表名,查詢一張表的索引
select
*
from
user_indexes
where
table_name=upper('表名');
2.
根據索引號,查詢表索引字段
select
*
from
user_ind_columns
where
index_name=('索引名');
3.根據索引名,查詢創(chuàng)建索引的語句
select
dbms_metadata.get_ddl('index','索引名',
['用戶名'])
from
dual
;
--['用戶名']可省,默認為登錄用戶
ps:dbms_metadata.get_ddl還可以得到建表語句,如:
select
dbms_metadata.get_ddl('table','表名',
['用戶名'])
from
dual
;
//取單個表的建表語句,['用戶名']可不輸入,默認為登錄用戶
select
dbms_metadata.get_ddl('table',u.table_name)
from
user_tables
u;
//取用戶下所有表的建表語句
當然,也可以用pl/sql
developer工具來查看相關的表的各種信息。
explain顯示了MySQL如何使用索引來處理select語句以及連接表。可以幫助選擇更好的索引和寫出更優(yōu)化的查詢語句。
使用方法,在select語句前加上explain就可以了:
如:
explain?select?surname,first_name?form?a,b?where?a.id=b.id
EXPLAIN列的解釋:
table:顯示這一行的數(shù)據是關于哪張表的
type:這是重要的列,顯示連接使用了何種類型。從最好到最差的連接類型為const、eq_reg、ref、range、indexhe和ALL
possible_keys:顯示可能應用在這張表中的索引。如果為空,沒有可能的索引。可以為相關的域從WHERE語句中選擇一個合適的語句
key: 實際使用的索引。如果為NULL,則沒有使用索引。很少的情況下,MYSQL會選擇優(yōu)化不足的索引。這種情況下,可以在SELECT語句中使用USE INDEX(indexname)來強制使用一個索引或者用IGNORE INDEX(indexname)來強制MYSQL忽略索引
key_len:使用的索引的長度。在不損失精確性的情況下,長度越短越好
ref:顯示索引的哪一列被使用了,如果可能的話,是一個常數(shù)
rows:MYSQL認為必須檢查的用來返回請求數(shù)據的行數(shù)
Extra:關于MYSQL如何解析查詢的額外信息。將在表4.3中討論,但這里可以看到的壞的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,結果是檢索會很慢
extra列返回的描述的意義
Distinct:一旦MYSQL找到了與行相聯(lián)合匹配的行,就不再搜索了
Not exists: MYSQL優(yōu)化了LEFT JOIN,一旦它找到了匹配LEFT JOIN標準的行,就不再搜索了
Range checked for each Record(index map:#):沒有找到理想的索引,因此對于從前面表中來的每一個行組合,MYSQL檢查使用哪個索引,并用它來從表中返回行。這是使用索引的最慢的連接之一
Using filesort: 看到這個的時候,查詢就需要優(yōu)化了。MYSQL需要進行額外的步驟來發(fā)現(xiàn)如何對返回的行排序。它根據連接類型以及存儲排序鍵值和匹配條件的全部行的行指針來排序全部行
Using index: 列數(shù)據是從僅僅使用了索引中的信息而沒有讀取實際的行動的表返回的,這發(fā)生在對表的全部的請求列都是同一個索引的部分的時候
Using temporary 看到這個的時候,查詢需要優(yōu)化了。這里,MYSQL需要創(chuàng)建一個臨時表來存儲結果,這通常發(fā)生在對不同的列集進行ORDER BY上,而不是GROUP BY上
Where used 使用了WHERE從句來限制哪些行將與下一張表匹配或者是返回給用戶。如果不想返回表中的全部行,并且連接類型ALL或index,這就會發(fā)生,或者是查詢有問題不同連接類型的解釋(按照效率高低的順序排序)
system 表只有一行:system表。這是const連接類型的特殊情況
const:表中的一個記錄的最大值能夠匹配這個查詢(索引可以是主鍵或惟一索引)。因為只有一行,這個值實際就是常數(shù),因為MYSQL先讀這個值然后把它當做常數(shù)來對待
eq_ref:在連接中,MYSQL在查詢時,從前面的表中,對每一個記錄的聯(lián)合都從表中讀取一個記錄,它在查詢使用了索引為主鍵或惟一鍵的全部時使用
ref:這個連接類型只有在查詢使用了不是惟一或主鍵的鍵或者是這些類型的部分(比如,利用最左邊前綴)時發(fā)生。對于之前的表的每一個行聯(lián)合,全部記錄都將從表中讀出。這個類型嚴重依賴于根據索引匹配的記錄多少—越少越好
range:這個連接類型使用索引返回一個范圍中的行,比如使用或查找東西時發(fā)生的情況
index: 這個連接類型對前面的表中的每一個記錄聯(lián)合進行完全掃描(比ALL更好,因為索引一般小于表數(shù)據)
ALL:這個連接類型對于前面的每一個記錄聯(lián)合進行完全掃描,這一般比較糟糕,應該盡量避免
假如你有一個表,
SQL CREATE TABLE test_tab (2 id INT,
3 name VARCHAR(10),
4 age INT,
5 val VARCHAR(10)6 );你的業(yè)務,有一個查詢,是
SELECT * FROM test_tab WHERE name = 一個外部輸入的數(shù)據
剛開始,數(shù)據不多的時候,執(zhí)行效果還不錯。
隨著數(shù)據量的增加,這個查詢,執(zhí)行起來,越來越慢了。
然后在 name 上面 建立了索引
CREATE INDEX idx_test4_name ON test_tab (name );
這樣, 可以加快前面那個查詢的速度。
但是,某天,你執(zhí)行了下面這個SQL, 發(fā)現(xiàn)速度又慢了
SELECT * FROM test_tab WHERE age = 25
為啥呢? 因為 age 字段上面,沒有索引
索引只在 name 上面有
換句話說, 也就是 WHERE 里面的條件, 會自動判斷,有沒有 可用的索引,如果有, 該不該用。
多列索引,就是一個索引,包含了2個字段。
例如:CREATE INDEX idx_test_name_age ON test_tab (name, age);那么SELECT * FROM test_tabWHEREname LIKE '張%'
AND age = 25
這樣的查詢,將能夠使用上面的索引。
多列索引,還有一個可用的情況就是, 某些情況下,可能查詢,只訪問索引就足夠了, 不需要再訪問表了。例如:SELECTAVG( avg ) AS 平均年齡FROMtest_tabWHEREname LIKE '張%'
這個時候, name 與 age 都包含在索引里面。 查詢不需要去檢索表中的數(shù)據。
查看索引的語法格式如下:
SHOW INDEX FROM 表名 [ FROM 數(shù)據庫名]
語法說明如下:
表名:指定需要查看索引的數(shù)據表名。
數(shù)據庫名:指定需要查看索引的數(shù)據表所在的數(shù)據庫,可省略。比如,SHOW INDEX FROM student FROM test; 語句表示查看 test 數(shù)據庫中 student 數(shù)據表的索引。
示例
使用 SHOW INDEX 語句查看《MySQL創(chuàng)建索引》一節(jié)中 tb_stu_info2 數(shù)據表的索引信息,SQL 語句和運行結果如下所示。
mysql SHOW INDEX FROM tb_stu_info2\G
1. row
Table: tb_stu_info2
Non_unique: 0
Key_name: height
Seq_in_index: 1
Column_name: height
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
Index_comment:
1 row in set (0.03 sec)
其中各主要參數(shù)說明如下:
參數(shù) 說明
Table 表示創(chuàng)建索引的數(shù)據表名,這里是 tb_stu_info2 數(shù)據表。
Non_unique 表示該索引是否是唯一索引。若不是唯一索引,則該列的值為 1;若是唯一索引,則該列的值為 0。
Key_name 表示索引的名稱。
Seq_in_index 表示該列在索引中的位置,如果索引是單列的,則該列的值為 1;如果索引是組合索引,則該列的值為每列在索引定義中的順序。
Column_name 表示定義索引的列字段。
Collation 表示列以何種順序存儲在索引中。在 MySQL 中,升序顯示值“A”(升序),若顯示為 NULL,則表示無分類。
Cardinality 索引中唯一值數(shù)目的估計值。基數(shù)根據被存儲為整數(shù)的統(tǒng)計數(shù)據計數(shù),所以即使對于小型表,該值也沒有必要是精確的。基數(shù)越大,當進行聯(lián)合時,MySQL 使用該索引的機會就越大。
Sub_part 表示列中被編入索引的字符的數(shù)量。若列只是部分被編入索引,則該列的值為被編入索引的字符的數(shù)目;若整列被編入索引,則該列的值為 NULL。
Packed 指示關鍵字如何被壓縮。若沒有被壓縮,值為 NULL。
Null 用于顯示索引列中是否包含 NULL。若列含有 NULL,該列的值為 YES。若沒有,則該列的值為 NO。
Index_type 顯示索引使用的類型和方法(BTREE、FULLTEXT、HASH、RTREE)。
Comment 顯示評注。
當前文章:mysql怎么看索引狀態(tài),mysql怎么看表的索引
網頁地址:http://chinadenli.net/article31/dsspspd.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站收錄、App開發(fā)、營銷型網站建設、商城網站、網站內鏈、標簽優(yōu)化
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)