SQL聚集索引和非聚集索引的區(qū)別
一、概述
聚集索引:聚集索引是索引結(jié)構(gòu)和數(shù)據(jù)一起存放的索引。類似于字典的正文,當(dāng)我們根據(jù)拼音直接就能找到那個(gè)字。
非聚集索引:非聚集索引是索引結(jié)構(gòu)和數(shù)據(jù)分開存放的索引。類似于根據(jù)偏旁部首找字,首先找到該字所在的地址,再根據(jù)地址找到這個(gè)字的信息。
二、建立索引sql
建立聚簇索引使用CREATE INDEX語句,格式為:
CREATE CLUSTER INDEX index_name ON table_name(column_name1,column_name2,...);
三、區(qū)別及優(yōu)缺點(diǎn)
區(qū)別:
1.聚集索引一個(gè)表只能有一個(gè),而非聚集索引一個(gè)表可以存在多個(gè)
2.聚集索引存儲(chǔ)記錄是物理上連續(xù)存在,而非聚集索引是邏輯上的連續(xù),物理存儲(chǔ)并不連續(xù)
3.聚集索引:物理存儲(chǔ)按照索引排序;聚集索引是一種索引組織形式,索引的鍵值邏輯順序決定了表數(shù)據(jù)行的物理存儲(chǔ)順序。
4.非聚集索引:物理存儲(chǔ)不按照索引排序;非聚集索引則就是普通索引了,僅僅只是對數(shù)據(jù)列創(chuàng)建相應(yīng)的索引,不影響整個(gè)表的物理存儲(chǔ)順序。
5.索引是通過二叉樹的數(shù)據(jù)結(jié)構(gòu)來描述的,我們可以這么理解聚簇索引:索引的葉節(jié)點(diǎn)就是數(shù)據(jù)節(jié)點(diǎn)。而非聚簇索引的葉節(jié)點(diǎn)仍然是索引節(jié)點(diǎn),只不過有一個(gè)指針指向?qū)?yīng)的數(shù)據(jù)塊。
優(yōu)勢與缺點(diǎn):
聚集索引插入數(shù)據(jù)時(shí)速度要慢(時(shí)間花費(fèi)在“物理存儲(chǔ)的排序”上,也就是首先要找到位置然后插入),查詢數(shù)據(jù)比非聚集數(shù)據(jù)的速度快。
四、何時(shí)使用聚集索引或非聚集索引
| 動(dòng)作描述 | 使用聚集索引 | 使用非聚集索引 |
|---|---|---|
| 列經(jīng)常被分組排序 | 應(yīng) | 應(yīng) |
| 返回某范圍內(nèi)的數(shù)據(jù) | 應(yīng) | 不應(yīng) |
| 一個(gè)或極少不同值 | 不應(yīng) | 不應(yīng) |
| 小數(shù)目的不同值 | 應(yīng) | 不應(yīng) |
| 大數(shù)目的不同值 | 不應(yīng) | 應(yīng) |
| 頻繁更新的列 | 不應(yīng) | 應(yīng) |
| 外鍵列 | 應(yīng) | 應(yīng) |
| 主鍵列 | 應(yīng) | 應(yīng) |
| 頻繁修改索引列 | 不應(yīng) | 應(yīng) |
五、總結(jié)
1.使用聚集索引的查詢效率要比非聚集索引的效率要高,但是如果需要頻繁去改變聚集索引的值,寫入性能并不高,因?yàn)樾枰苿?dòng)對應(yīng)數(shù)據(jù)的物理位置。
2.非聚集索引在查詢的時(shí)候可以的話就避免二次查詢,這樣性能會(huì)大幅提升。
3.不是所有的表都適合建立索引,只有數(shù)據(jù)量大表才適合建立索引,且建立在選擇性高的列上面性能會(huì)更好。
到此這篇關(guān)于SQL聚集索引和非聚集索引的區(qū)別的文章就介紹到這了,更多相關(guān)SQL聚集索引和非聚集索引內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL中ON DUPLICATE KEY UPDATE優(yōu)雅解決存在更新/不存在插入難題
ON DUPLICATE KEY UPDATE是 MySQL 特有的一種 INSERT 語句擴(kuò)展,在 MySQL 中,實(shí)現(xiàn) Upsert 最優(yōu)雅、最高效的方式之一就是使用 ON DUPLICATE KEY UPDATE 語法,下面小編就為大家詳細(xì)講講它的具體使用吧2025-10-10
MySQL提示表不存在的解決error:1146:Table doesn‘t exist的原因和解決
在使用MySQL的過程中,有時(shí)會(huì)遇到“Table doesn't exist”(表不存在)的錯(cuò)誤,錯(cuò)誤代碼通常為1146,這個(gè)問題可能由多種原因引起,本文將幫助你診斷和解決這個(gè)問題,如果遇到同樣問題的小伙伴跟著小編一起來看看吧2024-12-12
MySQL批量導(dǎo)入Excel數(shù)據(jù)(超詳細(xì))
這篇文章主要介紹了MySQL批量導(dǎo)入Excel數(shù)據(jù)(超詳細(xì)),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下,希望對你的學(xué)習(xí)有所幫助2022-08-08
clickhouse中Nullable與非空字段的建表與類型互轉(zhuǎn)方式
這篇文章主要介紹了clickhouse中Nullable與非空字段的建表與類型互轉(zhuǎn)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
MySQL數(shù)據(jù)庫 Load Data 多種用法
這篇文章主要介紹MySQL數(shù)據(jù)庫中 Load Data 數(shù)據(jù)的幾種種用法,需要的朋友可以參考下面文章的解說2021-08-08

