您的位置:極速下載站→ 資訊首頁 → 系統(tǒng)教程 → 系統(tǒng)資訊 → 優(yōu)化MYSQL動態(tài)網(wǎng)站索引分析速度教程
時間:2019-09-16 14:49:06 作者:無名 瀏覽量:43
一、什么是索引?
索引證來快速地尋找那些具有特定值的記載,一切MySQL索引都以B-樹的形式保存。假如沒有索引,履行查詢時MySQL有必要從第一個記載開始掃描整個表的一切記載,直至找到符合要求的記載。表里面的記載數(shù)量越 多,這個操作的代價就越高。假如作為查找條件的列上已經(jīng)創(chuàng)立了索引,MySQL無需掃描任何記載即可迅速得到方針記載地點(diǎn)的位置。假如表有1000個記 錄,經(jīng)過索引查找記載至少要比次序掃描記載快100倍。
優(yōu)化MYSQL動態(tài)網(wǎng)站索引分析速度教程圖1
假定咱們創(chuàng)立了一個名為people的表:
CREATE TABLE people ( peopleid SMALLINT NOT NULL,name CHAR(50) NOT NULL );
然后,咱們徹底隨機(jī)把1000個不同name值刺進(jìn)到people表。在數(shù)據(jù)文件中name 列沒有任何清晰的次序。假如咱們創(chuàng)立了name列的索引,MySQL將在索引中排序name列,對于索引中的每一項(xiàng),MySQL在內(nèi)部為它保存一個數(shù)據(jù)文 件中實(shí)際記載地點(diǎn)位置的“指針”。因而,假如咱們要查找name等于“Mike”記載的peopleid(SQL指令為“SELECT peopleid FROM people WHERE name='Mike';”),MySQL可以在name的索引中查找“Mike”值,然后直接轉(zhuǎn)到數(shù)據(jù)文件中相應(yīng)的行,精確地返回該行的 peopleid(999)。在這個過程中,MySQL只需處理一個行就可以返回成果。假如沒有“name”列的索引,MySQL要掃描數(shù)據(jù)文件中的一切 記載,即1000個記載!顯然,需求MySQL處理的記載數(shù)量越少,則它完成任務(wù)的速度就越快。
二、索引的類型
MySQL供給多種索引類型供選擇:
一般索引 :
這是最基本的索引類型,并且它沒有僅有性之類的約束。一般索引可以經(jīng)過以下幾種方法創(chuàng)立:
創(chuàng)立索引,例如CREATE INDEX <索引的姓名> ON tablename (列的列表);
修正表,例如ALTER TABLE tablename ADD INDEX [索引的姓名] (列的列表);
創(chuàng)立表的時分指定索引,例如CREATE TABLE tablename ( [...],INDEX [索引的姓名] (列的列表) );
僅有性索引:
優(yōu)化MYSQL動態(tài)網(wǎng)站索引分析速度教程圖2
這種索引和前面的“一般索引”基本相同,但有一個區(qū)別:索引列的一切值都只能出現(xiàn)一次,即有必要僅有。僅有性索引可以用以下幾種方法創(chuàng)立:
創(chuàng)立索引,例如CREATE UNIQUE INDEX <索引的姓名> ON tablename (列的列表);
修正表,例如ALTER TABLE tablename ADD UNIQUE [索引的姓名] (列的列表);
創(chuàng)立表的時分指定索引,例如CREATE TABLE tablename ( [...],UNIQUE [索引的姓名] (列的列表) );
主鍵 :
主鍵是一種僅有性索引,但它有必要指定為“PRIMARY KEY”。假如你曾經(jīng)用過AUTO_INCREMENT類型的列,你可能已經(jīng)熟悉主鍵之類的概念了。主鍵一般在創(chuàng)立表的時分指定,例如“CREATE TABLE tablename ( [...],PRIMARY KEY (列的列表) ); ”?墒,咱們也可以經(jīng)過修正表的方法加入主鍵,例如“ALTER TABLE tablename ADD PRIMARY KEY (列的列表); ”。每個表只能有一個主鍵。
全文索引:
MySQL從3.23.23版開始支撐全文索引和全文檢索。在MySQL中,全文索引的索引 類型為FULLTEXT。全文索引可以在VARCHAR或許TEXT類型的列上創(chuàng)立。它可以經(jīng)過CREATE TABLE指令創(chuàng)立,也可以經(jīng)過ALTER TABLE或CREATE INDEX指令創(chuàng)立。對于大規(guī)模的數(shù)據(jù)集,經(jīng)過ALTER TABLE(或許CREATE INDEX)指令創(chuàng)立全文索引要比把記載刺進(jìn)帶有全文索引的空表更快。本文下面的討論不再觸及全文索引,要了解更多信息,請拜見MySQL documentation。
三、單列索引與多列索引