什么是索引?怎么創建索引?索引的使用原則?


索引的介紹
索引在MySQL中也叫做“鍵”,它是一個特殊的文件,它保存着數據表里所有記錄的位置信息,更通俗的來說,數據庫索引好比是一本書前面的目錄,能加快數據庫的查詢速度。
當數據庫中數據量很大時,查找數據會變得很慢,我們就可以通過索引來提高數據庫的查詢效率。

索引的使用
查看表中已有索引:

show index from 表名;

說明:
主鍵列會自動創建索引

索引的創建:

-- 創建索引的語法格式
-- alter table 表名 add index 索引名[可選](列名, ..)
-- 給name字段添加索引
alter table classes add index my_name (name);

 
說明:
索引名不指定,默認使用字段名

索引的刪除:

-- 刪除索引的語法格式
-- alter table 表名 drop index 索引名
-- 如果不知道索引名,可以查看創表sql語句
show create table classes;
alter table classes drop index my_name;

 
案例-驗證索引查詢性能
創建測試表testindex:
create table test_index(title varchar(10));
 
向表中插入十萬條數據:

from pymysql import connect
def main():
# 創建Connection連接
conn = connect(host='localhost',port=3306,database='python',user='root',passwor
d='mysql',charset='utf8')
# 獲得Cursor對象
cursor = conn.cursor()
# 插⼊10萬次數據
for i in range(100000):
cursor.execute("insert into test_index values('ha-%d')" % i)
# 提交數據
conn.commit()
if __name__ == "__main__":
main()

 
驗證索引性能操作:

-- 開啟運⾏時間監測:
set profiling=1;
-- 查找第1萬條數據ha-99999
select * from test_index where title='ha-99999';
-- 查看執⾏的時間:
show profiles;
-- 給title字段創建索引:
alter table test_index add index (title);
-- 再次執⾏查詢語句
select * from test_index where title='ha-99999';
-- 再次查看執⾏的時間
show profiles;
 
4.聯合索引
聯合索引又叫復合索引,即一個索引覆蓋表中兩個或者多個字段,一般用在多個字段一起查詢的時
候。

-- 創建teacher表
create table teacher
(
id int not null primary key auto_increment,
索引
84
name varchar(10),
age int
);
-- 創建聯合索引
alter table teacher add index (name,age);
 
聯合索引的好處:
減少磁盤空間開銷,因為每創建一個索引,其實就是創建了一個索引文件,那么會增加磁盤空間
的開銷。

聯合索引的最左原則
在使用聯合索引的時候,我們要遵守一個最左原則,即index(name,age)支持 name 、name 和 age 組合查
詢,而不支持單獨 age 查詢,因為沒有用到創建的聯合索引。
-- 下⾯的查詢使⽤到了聯合索引
select * from stu where name='張三' -- 這⾥使⽤了聯合索引的name部分
select * from stu where name='李四' and age=10
-- 這⾥完整的使⽤聯合索引,包括 name 和 age 部分
-- 下⾯的查詢沒有使⽤到聯合索引
select * from stu where age=10 -- 因為聯合索引⾥⾯沒有這個組合,只有 name | name age 這兩種組合

 
說明:
在使用聯合索引的查詢數據時候一定要保證聯合索引的最左側字段出現在查詢條件里面,否則聯合索引失效

MySQL中索引的優點和缺點和使用原則
優點:
加快數據的查詢速度
缺點:
創建索引會耗費時間和占用磁盤空間,並且隨着數據量的增加所耗費的時間也會增加
使用原則:

通過優缺點對比,不是索引越多越好,而是需要自己合理的使用。
對經常更新的表就避免對其進行過多索引的創建,對經常用於查詢的字段應該創建索引,
數據量小的表最好不要使用索引,因為由於數據較少,可能查詢全部數據花費的時間比遍歷
索引的時間還要短,索引就可能不會產生優化效果。
在一字段上相同值比較多不要建立索引,比如在學生表的"性別"字段上只有男,女兩個不同值。相反的,在一個字段上不同值較多可是建立索引。
小結
索引是加快數據庫的查詢速度的一種手段
創建索引使用: alter table 表名 add index 索引名[可選] (字段名, xxx);
刪除索引使用: alter table 表名 drop index 索引名; 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM