首頁 資料庫 mysql教程 Mysql建立索引 提高系統的運作速度

Mysql建立索引 提高系統的運作速度

Dec 15, 2016 am 11:26 AM

假如我們建立了一個 mytable表:
CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL  );   我們隨機插入了10000筆記錄,其中有一筆:55555, min5555, min。
在查找username="admin"的記錄 SELECT * FROM mytable WHERE username='admin';時,如果在username上已經建立了索引,MySQL無須任何掃描,即準確可找到該記錄。相反,MySQL會掃描所有記錄,也就是要查詢10000筆記錄。
索引分單列索引和組合索引。單列索引,即一個索引只包含單一資料列,一個表格可以有多個單列索引,但這不是組合索引。組合索引,即一個索包含​​多個列。
MySQL索引類型包含:
(7)使用索引的注意事項
使用索引時,有以下一些技巧與注意事項:
◆索引不會包含有NULL值的欄位
只要列中包含有NULL值都會不會被包含在索引中,複合索引中只要有一列含有NULL值,那麼這一列對於此複合索引就是無效的。所以我們在資料庫設計時不要讓欄位的預設值為NULL。
◆使用短索引
對串列進行索引,如果可能應該指定一個前綴長度。例如,如果有一個CHAR(255)的列,如果在前10個或20個字元內,多數值是惟一的,那麼就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節省磁碟空間和I/O操作。
◆索引列排序
MySQL查詢只使用一個索引,因此如果where子句中已經使用了索引的話,那麼order by中的欄位是不會使用索引的。因此資料庫預設排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要最好給這些列建立複合索引。
◆like語句操作
一般情況下不鼓勵使用like操作,如果非使用不可,如何使用也是一個問題。 like “%aaa%” 不會使用索引而like “aaa%”可以使用索引。
◆不要在列上進行運算
select * from users where YEAR(adddate)select * from from users where adddate◆不使用NOT IN和操作
以上,就對其中MySQL索引類型進行了介紹。
(6)索引的缺點
上面都在說使用索引的好處,但過多的使用索引將會造成濫用。因此索引也會有它的缺點:
◆雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對錶進行INSERT、UPDATE和DELETE。因為更新表時,MySQL不僅要保存數據,還要保存索引檔。
◆建立索引會佔用磁碟空間的索引檔。一般情況這個問題不太嚴重,但如果你在一個大表上建立了多種組合索引,索引檔案的會膨脹很快。
索引只是提高效率的一個因素,如果你的MySQL有大數據量的表,就需要花時間研究建立最優秀的索引,或優化查詢語句。
(5)建立索引的時機
到這裡我們已經學會了建立索引,那麼我們需要在什麼情況下建立索引呢?一般來說,在WHERE和JOIN中出現的欄位需要建立索引,但也不完全如此,因為MySQL只對,>=,BETWEEN,IN,以及某些時候的LIKE才會使用索引。例如:
SELECT t.Name  FROM mytable t LEFT JOIN mytable m    ON t.Name=m.username WHERE m.age=20 AND m.city='鄭州' 此時就需要對city和age建立索引,由於mytable表的userame也出現在了JOIN子句中,也有對它建立索引的必要。
剛才提到只有某些時候的LIKE才需建立索引。因為以通配符%和_開頭作查詢時,MySQL不會使用索引。例如下句會使用索引:
SELECT * FROM mytable WHERE username like'admin%' 而下句就不會使用:
SELECT * FROM mytable WHEREt Name like'%admin' 因此,使用LIKE時應注意以上的差異。
(4)組合索引
為了形像地比較單一欄位索引與組合索引,為資料表新增多個欄位:
CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL,  city VAR age INT NOT NULL  );  為了進一步榨取MySQL的效率,就要考慮建立組合索引。就是將 name, city, age建到一個索引裡:
ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age); 建表時,usernname長度為 16,這裡用 10。這是因為一般情況下名字的長度不會超過10,這樣會加速索引查詢速度,還會減少索引檔案的大小,提高INSERT的更新速度。
如果分別在 usernname,city,age上建立單列索引,讓該表有3個單列索引,查詢時和上述的組合索引效率也會大不一樣,遠低於我們的組合索引。雖然此時有了三個索引,但MySQL只能用到其中的那個它認為似乎是最有效率的單列索引。
建立這樣的組合索引,其實是相當於分別建立了下面三組組合索引:
usernname,city,age   usernname,city   usernname  為什麼沒有 city,像age這樣的組合索引呢?這是因為MySQL組合索引「最左前綴」的結果。簡單的理解就是只從最左邊的開始組合。並不是只要包含這三列的查詢都會用到該組合索引,下面的幾個SQL就會用到這個組合索引:
SELECT * FROM mytable WHREE username="admin" AND city="鄭州"  SELECT * FROM mytable WHREE username="admin" 而下面幾個則不會用到:
SELECT * FROM mytable WHREE age=20 AND city="鄭州"  SELECT * FROM mytable WHREE city="鄭州"
(3)主鍵索引
它是一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時建立主鍵索引:
CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL,   PRIMARY KEY(ID)   );  當然也可以用 ALTER 當然也可以用 ALTER 當然也可以用 ALTER 當然也可以用 ALTER 當然也可以用 ALTER 當然也可以用 ALTER。記住:一個表只能有一個主鍵。
(2)唯一索引
它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾個建立方式:
◆建立索引
CREATE UNIQUE INDEX indexName ON mytable(username(length)) ◆修改表格結構
ALTER mytable ADD UNIQUE [indexName] ON (username(length)) ◆建立表格的時候直接建立表格的時候直接建立表格指定
CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL,   UNIQUE [indexName] (username(length))   );
(1)的普通索引
(1)通用索引
。它有以下幾種建立方式:
◆建立索引
CREATE INDEX indexName ON mytable(username(length)); 如果是CHAR,VARCHAR類型,length可以小於欄位實際長度;如果是BLOB和TEXT類型,必須指定length,下同。
約定username(length))   );  刪除索引的語法:
DROP INDEX [indexName] ON mytable;
索引是快速搜尋的關鍵。 MySQL索引的建立對於MySQL的高效運作是很重要的。以下介紹幾種常見的MySQL索引類型。
在資料庫表中,對欄位建立索引可以大幅提高查詢速度。

以上就是Mysql建立索引 提高系統的運作速度的內容, 更多相關文章請關注PHP中文網(www.php.cn)!


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

mysql索引失效的幾種情況 mysql索引失效的幾種情況 Feb 21, 2024 pm 04:23 PM

常見情況:1、使用函數或運算;2、隱式類型轉換;3、使用不等於(!=或<>);4、使用LIKE操作符,並以通配符開頭;5、OR條件;6、NULL值;7、索引選擇性低;8、複合索引的最左前綴原則;9、優化器決策;10、FORCE INDEX和IGNORE INDEX。

與MySQL中使用索引相比,全表掃描何時可以更快? 與MySQL中使用索引相比,全表掃描何時可以更快? Apr 09, 2025 am 12:05 AM

全表掃描在MySQL中可能比使用索引更快,具體情況包括:1)數據量較小時;2)查詢返回大量數據時;3)索引列不具備高選擇性時;4)複雜查詢時。通過分析查詢計劃、優化索引、避免過度索引和定期維護表,可以在實際應用中做出最優選擇。

為什麼C程式碼比Python的運行速度更快? 為什麼C程式碼比Python的運行速度更快? Sep 11, 2023 pm 12:45 PM

在本文中,我們將了解為什麼C語言程式碼運行速度比Python更快。 GuidoVanRossum開發了Python,這是最著名的程式語言之一。 Python因其清晰的語法和簡單的程式碼而受到開發人員的歡迎,即使對於新手來說也是如此。學習Python對於那些剛開始程式設計職業生涯的人來說是非常有利的。他們可以使用Python程式設計培訓、部落格、影片、模組和數千種其他資源來了解這種流行語言的各個方面。完成後,您將能夠進行現代開發活動,例如GUI開發、網頁設計、系統管理、複雜的金融交易或計算、數據科學、視覺化等等。

mysql索引什麼情況下會失效 mysql索引什麼情況下會失效 Aug 09, 2023 pm 03:38 PM

mysql索引在不使用索引列進行查詢、資料類型不符、前綴索引的使用不當、使用函數或表達式進行查詢、索引列的順序不正確、資料更新頻繁和索引過多或過少情況下會失效。 1、不使用索引列進行查詢,為了避免這種情況,應在查詢中使用適當的索引列;2、資料類型不匹配,在設計表結構時,應確保索引列和查詢的資料類型匹配;3 、前綴索引的使用不當,可使用前綴索引。

win10系統如何調整虛擬記憶體提高運行速度 win10系統如何調整虛擬記憶體提高運行速度 Jul 01, 2023 pm 02:01 PM

  win10系統如何調整虛擬記憶體提高運行速度?隨著電腦的使用率越來越高,我們有時候可能會遇到對win10系統調整虛擬記憶體提高運行速度進行設置,如果我們需要對win10系統調整虛擬記憶體提高運行速度進行設置時,要怎麼處理win10系統調整虛擬記憶體提高運行速度呢?  win10系統調整虛擬記憶體提高運行速度的修復方案  1.點選開始選單–所有應用–Windows系統–這台電腦,右鍵這台電腦,點選選擇「屬性」進入下一步操作。  2.在開啟的系統視窗中,點選左側的「進階系統設定」進入下一步操作。  3.在

MySQL索引左前綴匹配規則 MySQL索引左前綴匹配規則 Feb 24, 2024 am 10:42 AM

MySQL索引最左原則原理及程式碼範例在MySQL中,索引是提高查詢效率的重要手段之一。其中,索引最左原則是我們在使用索引來優化查詢的過程中需要遵循的一個重要原則。本文將圍繞MySQL索引最左原則的原理進行介紹,並給出一些具體的程式碼範例。一、索引​​最左原則的原理索引最左原則是指在一個索引中,如果查詢條件是由多個列組成的,那麼只有按照索引中的最左側列進行查詢,才能充

說明不同類型的MySQL索引(B樹,哈希,全文,空間)。 說明不同類型的MySQL索引(B樹,哈希,全文,空間)。 Apr 02, 2025 pm 07:05 PM

MySQL支持四種索引類型:B-Tree、Hash、Full-text和Spatial。 1.B-Tree索引適用於等值查找、範圍查詢和排序。 2.Hash索引適用於等值查找,但不支持範圍查詢和排序。 3.Full-text索引用於全文搜索,適合處理大量文本數據。 4.Spatial索引用於地理空間數據查詢,適用於GIS應用。

mysql索引的分類有哪幾種 mysql索引的分類有哪幾種 Apr 22, 2024 pm 07:12 PM

MySQL 索引分為以下類型:1. 普通索引:匹配值、範圍或前綴;2. 唯一索引:確保值唯一;3. 主鍵索引:主鍵列的唯一索引;4. 外鍵索引:指向另一表主鍵;5. 全文索引:全文搜尋;6. 雜湊索引:相等配對搜尋;7.空間索引:地理空間搜尋;8. 複合索引:基於多個欄位的搜尋。

See all articles