關鍵字查詢我的網(wǎng)站怎么做,鄭州網(wǎng)絡推廣服務,清新網(wǎng)站模板,網(wǎng)站后臺流程圖索引覆蓋 索引覆蓋或稱為覆蓋索引,是數(shù)據(jù)庫中的一種優(yōu)化手段當我們在執(zhí)行一個sql查詢時,如果只需要查詢某幾個字段的值,并且這幾個字段的數(shù)據(jù)都已經(jīng)被包含在某一個索引中(而不是全表掃描),那么數(shù)據(jù)庫引擎就會直接通過這個索引來取…- 索引覆蓋
- 索引覆蓋或稱為覆蓋索引,是數(shù)據(jù)庫中的一種優(yōu)化手段
- 當我們在執(zhí)行一個sql查詢時,如果只需要查詢某幾個字段的值,并且這幾個字段的數(shù)據(jù)都已經(jīng)被包含在某一個索引中(而不是全表掃描),那么數(shù)據(jù)庫引擎就會直接通過這個索引來取得數(shù)據(jù),而無需再回表查詢,從而大大減少IO操作,提高了查詢效率
- 索引覆蓋的優(yōu)點:
- 減少IO次數(shù),:因為通過覆蓋索引可以直接獲取數(shù)據(jù),所以不需要再回表查詢,從而減少了IO次數(shù)
- 提高查詢速度:由于減少了IO操作,查詢速度自然也得到了提高
- 索引的選擇性:選擇性是指不重復的索引值與數(shù)據(jù)表的總記錄數(shù)的比值,選擇性越高,通過索引篩選出來的數(shù)據(jù)就越少,從而提高了查詢效率
- 回表
- sql回表是指在使用非聚簇索引(也稱為輔助索引或二級索引)進行查詢時,由于非聚簇索引中只存儲了索引字段的值和對應的主鍵(聚簇索引)鍵值,因此,如果需要獲取非索引列的數(shù)據(jù),則需要根據(jù)主鍵(聚簇索引)中的鍵值去查找實際的數(shù)據(jù)行,這個過程被稱為回表
- 回表的原理:
- 非聚簇索引結構:非聚簇索引的葉子節(jié)點存儲的是索引列的值,主鍵的值
- 查詢過程:
- 當使用非聚簇索引進行查詢時,首先通過非聚簇索引找到滿足條件的主鍵鍵值,然后根據(jù)這些主鍵鍵值,在回到聚簇索引(主鍵索引)中查找完整的數(shù)據(jù)行
- 舉例:
- 假設有一個用戶表users,包含id(主鍵),name和age三個字段,其中在name字段上建立了非聚集索引
- 執(zhí)行查詢 select * from users where name = ‘tom’;時,會發(fā)生回表,因為首先會通過name上的非聚集索引找到滿足條件的id,然后再根據(jù)這些id,回到聚簇索引中查找完整的用戶數(shù)據(jù)
- 而查詢select id,name from users where name = ‘tom’;則不會回表,因為所需的數(shù)據(jù)都在非聚簇索引中可以找到
- 而回表操作會增加IO次數(shù),從而可能影響查詢性能,特別是在大表和復雜查詢場景下,回表操作可能成為性能瓶頸
- 為了減少回表操作,可以考慮將需要查詢的字段加入到索引中,形成復合索引(也稱聯(lián)合索引或覆蓋索引),這樣查詢時就可以直接從索引中國獲取需要的數(shù)據(jù),而無需回表
- 最左匹配原則:
- 主要是在是復合索引(也稱為多列索引或多字段索引)時的一個關鍵概念,這個原則指出,當使用復合索引進行查詢時,查詢條件應該盡可能地從索引的最左邊開始匹配,這樣索引才能被有效地使用
- 當你基于復合索引進行查詢時,查詢條件必須包含索引的最左邊的一列或多列,以便索引能夠有效地使用,例如:如果你有一個基于last_name,first_name的復合索引,一下查詢可以有效地使用這個索引:
- 查詢基于last_name: select * from employees where last_name = ‘smith’;
- 查詢基于laset_name和first_name: select * from employees where last_name = ‘smith’ and first_name =‘john’;
- 但是一下查詢則不能有效地使用這個索引(因為他沒有包含索引的最左邊的列l(wèi)ast_name)
- 查詢基于:first_name: select * from employees where first_name = ‘john’;
- 在創(chuàng)建復合索引時,列的順序很重要,你應該將最常用于查詢條件的列放在索引的最左邊,例如:如果你經(jīng)?;趌ast_name進行查詢,但很少基于first_name進行查詢,那么你應該創(chuàng)建一個基于last_name和first_name的索引,而不是基于first_name和last_name的索引