Mysql數(shù)據(jù)庫(kù)應(yīng)用--索引(二)

創(chuàng)建索引

  • 創(chuàng)建表的時(shí)候創(chuàng)建索引

CREATE TABLE table_name [col_name data_type] [UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] [index_name] (col_name [length]) [ASC|DESC]

UNIQUE、FULLTEXT和SPATIAL為可選參數(shù),分別表示唯一索引、全文索引和空間索引;INDEX與KEY為同義詞,兩者作用相同,用來(lái)指定創(chuàng)建索引;col_name為需要?jiǎng)?chuàng)建索引的字段列,該列必須從數(shù)據(jù)表中定義的多個(gè)列中選擇;index_name指定索引的名稱(chēng),為可選參數(shù),如果不指定,MySQL默認(rèn)col_name為索引值;length為可選參數(shù),表示索引的長(zhǎng)度,只有字符串類(lèi)型的字段才能指定索引長(zhǎng)度;ASC或DESC指定升序或者降序的索引值存儲(chǔ)

  • 查看索引
CREATE TABLE `book`(
`bookId` INT NOT NULL,
`bookName` VARCHAR(255) NOT NULL,
`authors` VARCHAR(255) NOT NULL,
`info` VARCHAR(255),
`comment` VARCHAR(255),
`yearPublication` YEAR NOT NULL,
INDEX(yearPublication) 
);

創(chuàng)建唯一索引

CREATE TABLE t1(
`id` INT NOT NULL,
`name` CHAR(30) NOT NULL,
UNIQUE INDEX UniqIdx(id)
);

創(chuàng)建單列索引

CREATE TABLE t1(
`id` INT NOT NULL,
`name` CHAR(30) NOT NULL,
INDEX SingleIdx(name(20))
);

創(chuàng)建索引長(zhǎng)度為20的單列索引

創(chuàng)建組合索引

CREATE TABLE t3(
`id` INT NOT NULL,
`name` CHAR(20) NOT NULL,
`age` INT NOT NULL,
`info` VARCHAR(255),
INDEX MultiIdx(`id`, `name`, `age`)
);
  • 查看表的結(jié)構(gòu)
SHOW CREATE TABLE t3;

CREATE TABLE `t3` (
  `id` int(11) NOT NULL,
  `name` char(20) NOT NULL,
  `age` int(11) NOT NULL,
  `info` varchar(255) DEFAULT NULL,
  KEY `MultiIdx` (`id`,`name`,`age`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

由結(jié)果可以看出,創(chuàng)建了id、name、age名為MultiIdx的組合索引

組合索引可起到幾個(gè)索引的作用,但是使用時(shí)并不是隨便查詢(xún)哪個(gè)字段都可以使用索引,而是要遵循“最左前綴”原則:利用索引中最左邊的列集來(lái)匹配行,這樣的列集稱(chēng)為最左前綴。例如,這里有id、name和age三個(gè)字段構(gòu)成的索引,索引行中按照id/name/age的順序存放,索引可以搜索下面的字段組合:(id,name,age),(id,name)或者id。


EXPLANIN語(yǔ)句--查看索引

EXPLAIN SELECT * FROM book WHERE yearPublication=2016;

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE book ref yearPublication yearPublication 1 const 1

EXPLANIN語(yǔ)句輸出結(jié)果的各行解釋如下:

(1) select_type: 指定所使用的SELECT查詢(xún)類(lèi)型,這里值為SIMPLE,表示簡(jiǎn)單的SELECT,不使用UNION或子查詢(xún)。其他可能的取值有PRIMARY、UNION、SUBQUERY等。

(2) table: 指定數(shù)據(jù)庫(kù)讀取的數(shù)據(jù)表的名字,它們按被讀取的先后順序排列。

(3) type: 指定本數(shù)據(jù)庫(kù)表與其他數(shù)據(jù)表之間的關(guān)聯(lián)關(guān)系,可能的取值有system、const、eq_ref、ref、range、index、和all。

(4) possible_keys: 給出MySQL在搜索數(shù)據(jù)記錄時(shí)可選用的各個(gè)索引。

(5) key: MySQL實(shí)際選用的索引。

(6) key_len: 給出索引按字節(jié)計(jì)算的長(zhǎng)度,key_len的數(shù)值越小,表示查詢(xún)速度越快

(7) ref: 給出關(guān)聯(lián)關(guān)系中另一個(gè)數(shù)據(jù)表里的數(shù)據(jù)列的名字。

(8) rows: MySQL在執(zhí)行這個(gè)查詢(xún)時(shí)預(yù)計(jì)會(huì)從這個(gè)數(shù)據(jù)表里讀出的數(shù)據(jù)行的個(gè)數(shù)。

(9) extra: 提供與關(guān)聯(lián)操作有關(guān)的信息。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 之前的文章一直在規(guī)避索引的建立去優(yōu)化數(shù)據(jù)庫(kù),不是不想講,而是這個(gè)太重要,必須抽出來(lái)講。今天我們就來(lái)研究下數(shù)據(jù)庫(kù)索引...
    JackFrost_fuzhu閱讀 4,827評(píng)論 0 70
  • 1、MySQL啟動(dòng)和關(guān)閉(安裝及配置請(qǐng)參照百度經(jīng)驗(yàn),這里不再記錄。MySQL默認(rèn)端口號(hào):3306;默認(rèn)數(shù)據(jù)類(lèi)型格式...
    強(qiáng)壯de西蘭花閱讀 761評(píng)論 0 1
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評(píng)論 19 139
  • 1、約束概述 約束的目的是為了保證數(shù)據(jù)的完整性與一致性。 按照約束的范圍劃分:列級(jí)約束:只對(duì)一個(gè)數(shù)據(jù)列建立約束。既...
    黒貓閱讀 1,087評(píng)論 3 5
  • 今天開(kāi)了一天的會(huì),身心俱疲,打開(kāi)臺(tái)燈,泛黃的燈光照在書(shū)桌的那一刻,倦意反而消失了。接著來(lái)寫(xiě) Postman,今天介...
    野鳥(niǎo)閱讀 18,074評(píng)論 0 9

友情鏈接更多精彩內(nèi)容