网站黄色在线观看视频,男人和女人操逼有免费的视频吗2018高清,91熟女丨老女人丨高潮丰满,丝袜高潮流白浆潮喷在线播放

中國站

中國站

國際版

聯(lián)系我們

400-002-9968

售前咨詢

售后服務(wù)

注冊 登錄

博客 > SQL知識:SQL索引的類型、用法、創(chuàng)建以及使用場景

SQL知識:SQL索引的類型、用法、創(chuàng)建以及使用場景

  • 標(biāo)簽:
  • SQL
  • SQL索引
  • 數(shù)字證書

瀏覽量:1299次評論:0次

作者:銳成網(wǎng)絡(luò)整理時(shí)間:2024-07-11 17:15:03

SQL索引在數(shù)據(jù)庫中扮演著至關(guān)重要的角色,它們可以極大地提升數(shù)據(jù)庫的性能,降低查詢的耗時(shí)。今天我們將深入介紹SQL索引的相關(guān)知識,包括SQL索引的類型、用法以及使用場景,也包括創(chuàng)建索引的語法、索引的區(qū)別、以及索引的創(chuàng)建原則等內(nèi)容。

SQL知識:SQL索引的類型、用法、創(chuàng)建以及使用場景

索引的用法

索引類似于書籍的目錄,要想找到一本數(shù)的某個特定主題,需要先查找書的目錄,定位對應(yīng)的頁碼。

存儲引擎使用類似的方式進(jìn)行數(shù)據(jù)查詢,先去索引當(dāng)中找到對應(yīng)的值,然后根據(jù)匹配的索引找到對應(yīng)的數(shù)據(jù)行。

創(chuàng)建索引的語法

首先創(chuàng)建一個表

create table t1 (

id int primary key,

username varchar(20),

password varchar(20)

);

創(chuàng)建單個索引的語法

CREATE INDEX 索引名 on 表名(字段名)

索引名一般是:表名_字段名

給id創(chuàng)建索引:CREATE INDEX t1_id on t1(id);

創(chuàng)建聯(lián)合索引的語法:CREATE INDEX 索引名 on 表名(字段名1,字段名2)

給username和password創(chuàng)建聯(lián)合索引:CREATE index t1_username_password ON t1(username,password)

其中index還可以替換成unique,primary key,分別代表唯一索引和主鍵索引

刪除索引:DROP INDEX t1_username_password ON t1

索引對性能的影響

大大減少服務(wù)器需要掃描的數(shù)據(jù)量。

幫助服務(wù)器避免排序和臨時(shí)表。

將隨機(jī)I/O變順序I/O。

大大提高查詢速度。

降低寫的速度(不良影響)。

磁盤占用(不良影響)。

索引的使用場景

  • 對于非常小的表,大部分情況下全表掃描效率更高。
  • 中到大型表,索引非常有效。
  • 特大型的表,建立和使用索引的代價(jià)會隨之增大,可以使用分區(qū)技術(shù)來解決。

索引的類型

索引很多種類型,是在MySQL的存儲引擎實(shí)現(xiàn)的。

  • 普通索引:最基本的索引,沒有任何約束限制。
  • 唯一索引:和普通索引類似,但是具有唯一性約束。
  • 主鍵索引:特殊的唯一索引,不允許有空值。

索引的區(qū)別

  • 一個表只能有一個主鍵索引,但是可以有多個唯一索引。
  • 主鍵索引一定是唯一索引,唯一索引不是主鍵索引。
  • 主鍵可以與外鍵構(gòu)成參照完整性約束,防止數(shù)據(jù)不一致。
  • 聯(lián)合索引:將多個列組合在一起創(chuàng)建索引,可以覆蓋多個列。(也叫復(fù)合索引,組合索引)
  • 外鍵索引:只有InnoDB類型的表才可以使用外鍵索引,保證數(shù)據(jù)的一致性、完整性、和實(shí)現(xiàn)級聯(lián)操作(基本不用)。
  • 全文索引:MySQL自帶的全文索引只能用于MyISAM,并且只能對英文進(jìn)行全文檢索 (基本不用)

MySQL索引的創(chuàng)建原則

  • 最適合創(chuàng)建索引的列是出現(xiàn)在WHERE或ON子句中的列,或連接子句中的列而不是出現(xiàn)在SELECT關(guān)鍵字后的列。
  • 索引列的基數(shù)越大,數(shù)據(jù)區(qū)分度越高,索引的效果越好。
  • 對于字符串進(jìn)行索引,應(yīng)該制定一個前綴長度,可以節(jié)省大量的索引空間。
  • 根據(jù)情況創(chuàng)建聯(lián)合索引,聯(lián)合索引可以提高查詢效率。
  • 避免創(chuàng)建過多的索引,索引會額外占用磁盤空間,降低寫操作效率。
  • 主鍵盡可能選擇較短的數(shù)據(jù)類型,可以有效減少索引的磁盤占用提高查詢效率。

MySQL索引的注意事項(xiàng)

1、聯(lián)合索引遵循前綴原則

KEY(a,b,c)

#以下SQL語句可以用到索引

WHERE a = 1 AND b = 2 AND c = 3

WHERE a = 1 AND b = 2

WHERE a = 1

#以下SQL語句用不到索引

WHERE b = 2 AND c = 3

WHERE a = 1 AND c = 3

2、LIKE查詢,%不能在前

WHERE name LIKE "%wang%"

#以上語句用不到索引,可以用外部的ElasticSearch、Lucene等全文搜索引擎替代。

3、列值為空(NULL)時(shí)是可以使用索引的

MySQL難以優(yōu)化引用了可空列的查詢,它會使索引、索引統(tǒng)計(jì)和值更加復(fù)雜。可空列需要更多的儲存空間,還需要在MySQL內(nèi)部進(jìn)行特殊處理。

4、如果MySQL估計(jì)使用索引比全表掃描更慢,會放棄使用索引

例如:表中只有100條數(shù)據(jù)左右。對于SQL語句WHERE id > 1 AND id < 100,MySQL會優(yōu)先考慮全表掃描。

5、如果關(guān)鍵詞or前面的條件中的列有索引,后面的沒有,所有列的索引都不會被用到。

6、列類型是字符串,查詢時(shí)一定要給值加引號,否則索引失效。

例如:列name varchar(16),存儲了字符串"100" WHERE name = 100; 以上SQL語句能搜到,但無法用到索引。

重要聲明:本文來自SQL數(shù)據(jù)庫開發(fā),經(jīng)授權(quán)轉(zhuǎn)載,版權(quán)歸原作者所有,不代表銳成觀點(diǎn),轉(zhuǎn)載的目的在于傳遞更多知識和信息。

我的評論

還未登錄?點(diǎn)擊登錄

微信掃碼溝通
微信掃碼溝通

微信掃碼溝通

AI
return head