日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

创建二级索引_Mysql创建索引

發(fā)布時(shí)間:2023/12/2 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 创建二级索引_Mysql创建索引 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

零:文章概要

這篇文章,主要是和大家一起去了解 索引,然后一起使用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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。