提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔
一、索引的概念
1、簡(jiǎn)介
●索引是一個(gè)排序的列表,在這個(gè)列表中存儲(chǔ)著索引的值和包含這個(gè)值的數(shù)據(jù)所在行的物理地址(類似于C語(yǔ)言的鏈表通過(guò)指針指向數(shù)據(jù)記錄的內(nèi)存地址)。
●使用索引后可以不用掃描全表來(lái)定位某行的數(shù)據(jù),而是先通過(guò)索引表找到該行數(shù)據(jù)對(duì)應(yīng)的物理地址然后訪問(wèn)相應(yīng)的數(shù)據(jù),因此能加快數(shù)據(jù)庫(kù)的查詢速度。
●索引就好比是一本書的目錄,可以根據(jù)目錄中的頁(yè)碼快速找到所需的內(nèi)容。
●索引是表中一列或者若干列值排序的方法。
●建立索引的目的是加快對(duì)表中記錄的查找或排序
2、作用
●設(shè)置了合適的索引之后,數(shù)據(jù)庫(kù)利用各種快速定位技術(shù),能夠大大加快查詢速度,這是創(chuàng)建索引的最主要的原因。
●當(dāng)表很大或查詢涉及到多個(gè)表時(shí),使用索引可以成千上萬(wàn)倍地提高查詢速度。
●可以降低數(shù)據(jù)庫(kù)的IO成本,并且索引還可以降低數(shù)據(jù)庫(kù)的排序成本。
●通過(guò)創(chuàng)建唯一(鍵)性索引,可以保證數(shù)據(jù)表中每一行數(shù)據(jù)的唯一性。
●可以加快表與表之間的連接。
●在使用分組和排序時(shí),可大大減少分組和排序的時(shí)間。
3、索引的副作用:
●索引需要占用額外的磁盤空間。
對(duì)于 MyISAM 引擎而言,索引文件和數(shù)據(jù)文件是分離的,索引文件用于保存數(shù)據(jù)記錄的地址。
而 InnoDB 引擎的表數(shù)據(jù)文件本身就是索引文件。
●在插入和修改數(shù)據(jù)時(shí)要花費(fèi)更多的時(shí)間,因?yàn)樗饕惨S之變動(dòng)。
4、創(chuàng)建索引的原則依據(jù)
索引雖可以提升數(shù)據(jù)庫(kù)查詢的速度,但并不是任何情況下都適合創(chuàng)建索引。因?yàn)樗饕旧頃?huì)消耗系統(tǒng)資源,在有索引的情況下,數(shù)據(jù)庫(kù)會(huì)先進(jìn)行索引查詢,然后定位到具體的數(shù)據(jù)行,如果索引使用不當(dāng),反而會(huì)增加數(shù)據(jù)庫(kù)的負(fù)擔(dān)。
●表的主鍵、外鍵必須有索引。因?yàn)橹麈I具有唯一性,外鍵關(guān)聯(lián)的是子表的主鍵,查詢時(shí)可以快速定位
●記錄數(shù)超過(guò)300行的表應(yīng)該有索引。如果沒(méi)有索引,需要把表遍歷一遍,會(huì)嚴(yán)重影響數(shù)據(jù)庫(kù)的性能。
●經(jīng)常與其他表進(jìn)行連接的表,在連接字段上應(yīng)該建立索引。
●唯一性太差的字段不適合建立索引。
●更新太頻繁地字段不適合創(chuàng)建索引。
●經(jīng)常出現(xiàn)在 where 子句中的字段,特別是大表的字段,應(yīng)該建立索引。
select name,score from ky19 where id=1
●索引應(yīng)該建在選擇性高的字段上。
●索引應(yīng)該建在小字段上,對(duì)于大的文本字段甚至超長(zhǎng)字段,不要建索引。
5、索引的分類
普通索引:最基本的索引類型。
唯一索引:索引列每個(gè)值都唯一(允許有空值),且添加唯一鍵時(shí)會(huì)自動(dòng)創(chuàng)建唯一索引。
主鍵索引:就是主鍵 ,一個(gè)表只能有一個(gè)主鍵,主鍵字段的值不允許為NULL,也不允許重復(fù)。
組合索引:由多列組合的索引,可以做普通組合索引,唯一組合索引(多列組合的值不能重復(fù),其中某個(gè)單列是可以重復(fù)的)。且需要滿足最左原則,即使用 SELECT 語(yǔ)句查詢時(shí) WHERE 條件使用的字段順序必須和組合索引中的排序一致,否則索引將不會(huì)生效。
全文索引:適合在進(jìn)行模糊查詢的時(shí)候使用,可用于在一篇文章中檢索文本信息。Mysql15.6 版本以前 FULLTEXT 索引僅可用于 MyISAM 引擎,在5.6版本之后 innoDB 引擎也支持FULLTEXT 索引。全文索引可以在CHAR、VARCHAR 或者 TEXT 類型的列上創(chuàng)建。
二、索引的增刪改查
1.創(chuàng)建索引
(1)創(chuàng)建普通索引
直接創(chuàng)建
CREATE INDEX 索引名 ON 表名 (字段名(數(shù)據(jù)類型長(zhǎng)度));
修改表結(jié)構(gòu)
創(chuàng)建時(shí)指定索引
CREATE TABLE 表名 (字段1 數(shù)據(jù)類型,字段2 數(shù)據(jù)類型,... ,INDEX 索引名 (字段名(數(shù)據(jù)類型長(zhǎng)度));
(2)創(chuàng)建唯一索引
直接創(chuàng)建
CREATE UNIQUE INDEX 索引名 ON 表名 (字段名(數(shù)據(jù)類型長(zhǎng)度));
修改表結(jié)構(gòu)
創(chuàng)建唯一鍵自動(dòng)生成
(3)創(chuàng)建主鍵索引
修改表結(jié)構(gòu)
創(chuàng)建表時(shí)指定主鍵
(4)創(chuàng)建(唯一)組合索引
直接創(chuàng)建索引
修改表結(jié)構(gòu)
(5)創(chuàng)建和使用全文索引查詢
直接創(chuàng)建索引
修改表結(jié)構(gòu)
創(chuàng)建表時(shí)指定全文索引
使用全文索引查詢
2.刪除索引
DROP INDEX 索引名 ON 表名;
ALTER TABLE 表名 DROP INDEX 索引名;
3.查看索引
SHOW INDEX FROM 表名; 或 SHOW KEYS FROM 表名;
各字段的含義:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-572138.html
Table 表的名稱
Non_unique 如果索引內(nèi)容唯一,則為 0;如果可以不唯一,則為 1。
Key_name 索引的名稱。
Seq_in_index 索引中的列序號(hào),從 1 開(kāi)始。 limit 2,3
Column_name 列名稱。
Collation 列以什么方式存儲(chǔ)在索引中。在 MySQL 中,有值‘A’(升序)或 NULL(無(wú)分類)。
Cardinality 索引中唯一值數(shù)目的估計(jì)值。
Sub_part 如果列只是被部分地編入索引,則為被編入索引的字符的數(shù)目(zhangsan)。如果整列被編入索引,則為 NULL。
Packed 指示關(guān)鍵字如何被壓縮。如果沒(méi)有被壓縮,則為 NULL。
Null 如果列含有 NULL,則含有 YES。如果沒(méi)有,則該列含有 NO。
Index_type 用過(guò)的索引方法(BTREE, FULLTEXT, HASH, RTREE)。
Comment 備注。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-572138.html
到了這里,關(guān)于簡(jiǎn)單認(rèn)識(shí)MySQL數(shù)據(jù)庫(kù)索引的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!