创建二级索引_Mysql创建索引
零:文章概要
這篇文章,主要是和大家一起去了解 索引,然后一起使用CREATE INDEX語法給數(shù)據(jù)庫中的表創(chuàng)建一個(gè)索引。
一:先拿電話薄做個(gè)類比
假如,一個(gè)電話薄里面包含了一個(gè)城市的所有人的姓名和電話號(hào)碼。那么,想找到Bob Cat的電話號(hào)碼,另外我們知道電話簿中名字是按照字母順序排列的,所以首先要查找姓氏為Cat的頁面,然后在這個(gè)頁面下查找名字為Bob的電話號(hào)碼。
那如果在電話薄中的名字沒有按照字母排列,就需要去瀏覽所有的頁,然后在里面查找每個(gè)姓名直到找到Bob Cat,這種是查找了所有的電話頁,所以在時(shí)間上還是挺費(fèi)時(shí)的。
那我們將電話簿與數(shù)據(jù)庫表聯(lián)系起來,如果有一個(gè)電話簿表然后要找到Bob Cat的電話號(hào)碼,則可以執(zhí)行以下查詢:
SELECTphone_number FROM phone_book WHERE first_name = 'Bob' AND last_name = 'Cat';這個(gè)寫起來很容易,在數(shù)據(jù)量不大的時(shí)候查詢速度很快,但數(shù)據(jù)庫必須掃描表的所有行,直到找到該行為止,如果表有數(shù)百萬行而沒有索引時(shí),則檢索數(shù)據(jù)會(huì)耗費(fèi)很多的時(shí)間。
二:索引的介紹
索引是一種數(shù)據(jù)結(jié)構(gòu),例如B-Tree,這種數(shù)據(jù)結(jié)構(gòu)是需要額外的寫入和存儲(chǔ)為代價(jià)來提高表上數(shù)據(jù)檢索的速度。一旦建立了索引后,數(shù)據(jù)庫中查詢優(yōu)化器使用索引來快速定位數(shù)據(jù),然后就無需掃描表中給定查詢的每一行了。
其中。當(dāng)使用主鍵或唯一鍵創(chuàng)建表時(shí),MySQL會(huì)自動(dòng)創(chuàng)建名為PRIMARY的特殊索引, 該索引稱為聚簇索引。PRIMARY索引是比較特殊的,這個(gè)索引本身與數(shù)據(jù)一起存儲(chǔ)在同一個(gè)表中。另外除PRIMARY索引之外的其他索引稱為二級(jí)索引或非聚簇索引。
三:MySQL CREATE INDEX語句
通常,創(chuàng)建表的時(shí)候就能為表創(chuàng)建索引。 例如,以下語句創(chuàng)建一個(gè)新表,并創(chuàng)建了是由兩列c2和c3組成的索引。
CREATE TABLE t(c1 INT PRIMARY KEY,c2 INT NOT NULL,c3 INT NOT NULL,c4 VARCHAR(10),INDEX (c2,c3) );但是要為列或一組列添加索引,可以使用CREATE INDEX語句,如下所示:
CREATE INDEX index_name ON table_name (column_list)要為列創(chuàng)建索引,要指定索引名稱,索引所屬的表以及列。
例如,要為列c4添加新索引,請(qǐng)使用以下語句:
CREATE INDEX idx_c4 ON t(c4);默認(rèn)情況下,如果未指定索引類型,MySQL將創(chuàng)建B-Tree索引。 以下顯示了基于表的存儲(chǔ)引擎的允許索引類型:
四:MySQL CREATE INDEX 舉例
以下語句查找職位為Sales Rep的員工:
SELECT employeeNumber, lastName, firstName FROMemployees WHEREjobTitle = 'Sales Rep';這里數(shù)據(jù)返回了17行,表明17名員工的職位是銷售代表。
那我們要查看MySQL如何在內(nèi)部執(zhí)行此查詢,可以在SELECT語句的開頭添加EXPLAIN子句,會(huì)得到下面的結(jié)果:
可以看到,MySQL必須掃描包含23行的整個(gè)表,以查找具有Sales Rep職位的員工。
現(xiàn)在,讓我們使用CREATE INDEX語句為jobTitle列創(chuàng)建一個(gè)索引:
CREATE INDEX jobTitle ON employees(jobTitle);并再次執(zhí)行上述語句:
EXPLAIN SELECT employeeNumber, lastName, firstName FROMemployees WHEREjobTitle = 'Sales Rep';這時(shí)候看到,MySQL只需要在鍵列中指示的jobTitle索引中找到17行而不掃描整個(gè)表。
如果要顯示表的索引,可以使用下SHOW INDEXES語句,例如:
SHOW INDEXES FROM employees;返回結(jié)果如下的索引
image.png
這篇文章中我們介紹了MySQL索引以及如何為表中的列添加索引,希望大家可根據(jù)文末提供的數(shù)據(jù)源來自己敲寫代碼
翻譯參考:
1.Mysql創(chuàng)建索引
2.文章使用的數(shù)據(jù)源
總結(jié)
以上是生活随笔為你收集整理的创建二级索引_Mysql创建索引的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开机启动失败_电脑常见开机引导错误的解决
- 下一篇: mysql-5.5密码是多少_关于mys