<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
左字首原則是聯合索引在使用時要遵循的原則,查詢索引可以使用聯合索引的一部分,但是必須從最左側開始。在建立聯合索引時,要根據業務需求,where子句中將使用最頻繁的一列放在最左邊,mysql會一直向右匹配直到遇到範圍查詢(>、<、between、like)時停止匹配。即範圍列可以用到索引,範圍列後面的列無法用到索引。
比如查詢 a = 1 and b = 2 and c > 3 and d = 4
如果建立 (a,b,d,c) 順序的索引,d是用不到索引的,如果建立 (a,b,d,c) 的索引則都可以用到,a,b,d的順序可以任意調整。可以調整 a,b,c 順序的原因是 MySQL 具有查詢優化器
MySQL 查詢優化器
當按照索引中所有列進行精確匹配(“=” 或 “IN”)時,索引可以被用到,並且 type 為 const。理論上索引對順序是敏感的,但是 MySQL 的查詢優化器會自動調整 where 子句的條件順序以使用適合的索引,所以 MySQL 在進行精確匹配時不存在因 where 子句的順序問題而造成索引失效。
定義: 對於BLOB、TEXT,或者很長的VARCHAR型別的列,為它們的前幾個字元(具體幾個字元是在建立索引時指定的)建立索引,這樣的索引就叫字首索引。
優點: 這樣建立起來的索引更小,所以查詢更快。
缺點: 不能在 ORDER BY 或 GROUP BY 中使用字首索引,也不能把字首索參照作覆蓋索引。
建立方法:
alter table table_name add key( column_name( prefix_length));
注:這裡最關鍵的引數就是 prefix_length,這個值需要根據實際表的內容,來得到合適的索引選擇性。
prefix_length 計算方法:
先計算完整列的選擇性 :
select count(distinct col_1)/count(1) from table_1
再計算不同字首長度的選擇性 :
select count(distinct left(col_1,4))/count(1) from table_1
到最優長度之後,建立字首索引 :
create index idx_front on table_1 (col_1(4))
定義: 索引下推 Index Condition Pushdown(ICP) 是MySQL使用索引從表中檢索行資料的一種優化方式,從 MySQL5.6 開始支援。5.6 之前,儲存引擎會通過遍歷索引定位基表中的行,然後返回給 Server層,再去為這些資料行進行 WHERE 後的條件的過濾。MySQL5.6之後支援 ICP,如果WHERE條件可以使用索引,MySQL 會把這部分過濾操作放到儲存引擎層,儲存引擎通過索引過濾,把滿足的行從表中讀取出。ICP 能減少引擎層存取基表的次數(回表次數)和 Server層存取儲存引擎的次數。
MySQL通過 optimizer_switch 引數中的 index_condition_pushdown 選項來控制,預設是開啟的。
操作:
檢視是否開啟
show variables like'% optimizer_switch%';
設定 ICP
SET optimizer_switch = ‘index_condition_pushdown=off';
例子:
在 people_table中有一個二級索引(zipcode,lastname,firstname),查詢是
SELECT * FROM people WHERE zipcode='95054′ AND lastname LIKE ‘%etrunia%' AND address LIKE ‘%Main Street%';
1. 方法一:通過 show index 檢視表中含那些索引
show index from table_name
2. 方法二:通過 explain 命令檢視 SQL 語句的執行計劃:
例子:
explain select * from t where name = 'name1';
減少分裂和移動的頻率: 結合B+Tree的特點,自增主鍵是連續的,在插入過程中能儘量減少頁分裂,即使要進行頁分裂,也只會分裂很少一部分。並且能減少資料的移動,每次插入都是插入到最後。
1. 在執行 CREATE TABLE 時建立索引
CREATE TABLE user_index2 ( id INT auto_increment PRIMARY KEY, first_name VARCHAR (16), last_name VARCHAR (16), id_card VARCHAR (18), information text, KEY name (first_name, last_name), FULLTEXT KEY (information), UNIQUE KEY (id_card) );
2. 使用ALTER TABLE命令去增加索引
ALTER TABLE table_name ADD INDEX index_name (column_list);
ALTER TABLE 可用來建立普通索引、UNIQUE索引或PRIMARY KEY索引。
其中 table_name 是要增加索引的表名,column_list 指出對哪些列進行索引,多列時各列之間用逗號分隔。
索引名 index_name 可自己命名,預設時,MySQL將根據第一個索引列賦一個名稱。另外,ALTER TABLE允許在單個語句中更改多個表,因此可以在同時建立多個索引。
3. 使用CREATE INDEX命令建立。
CREATE INDEX index_name ON table_name (column_list);
通常通過索引查詢資料比全表掃描要快。但是我們也必須注意到它的代價。索引需要空間來儲存,也需要定期維護, 每當有記錄在表中增減或索引列被修改時,索引本身也會被修改。 這意味著每條記錄的I* NSERT,DELETE,UPDATE將為此多付出4,5 次的磁碟I/O。 因為索引需要額外的儲存空間和處理,那些不必要的索引反而會使查詢反應時間變慢。使用索引查詢不一定能提高查詢效能。
到此這篇關於MySQL索引詳細解析的文章就介紹到這了,更多相關MySQL索引內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45