博客 > SQL知識:SQL索引的類型、用法、創(chuàng)建以及使用場景
瀏覽量: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)容。
索引的用法
索引類似于書籍的目錄,要想找到一本數(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。
大大提高查詢速度。
降低寫的速度(不良影響)。
磁盤占用(不良影響)。
索引的使用場景
索引的類型
索引很多種類型,是在MySQL的存儲引擎實(shí)現(xiàn)的。
索引的區(qū)別
MySQL索引的創(chuàng)建原則
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)載的目的在于傳遞更多知識和信息。
相關(guān)文章推薦
2025-05-27 11:53:22
2024-08-20 17:58:16
2024-08-19 17:49:29
2024-08-19 10:23:28
2024-08-16 17:06:33
熱門工具
標(biāo)簽選擇
閱讀排行
我的評論
還未登錄?點(diǎn)擊登錄