日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

MySQL面试题 | 附答案解析(四)

發(fā)布時間:2023/11/27 生活经验 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL面试题 | 附答案解析(四) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

7. 索引算法有哪些?

索引算法有 BTree算法和Hash算法BTree算法

BTree

是最常用的mysql數(shù)據(jù)庫索引算法,也是mysql默認的算法。因為它不僅可以被用在=,>,>=,<,<=和between這些比較操作符上,而且還可以用于like操作符,只要它的查詢條件是一個不以通配符開頭的常量, 例如:

– 只要它的查詢條件是一個不以通配符開頭的常量

select * from user where name like ‘jack%’;–

如果一通配符開頭,或者沒有使用常量,則不會使用索引,例如:

select * from user where name like ‘%jack’;

Hash算法

Hash Hash索引只能用于對等比較,例如=,<=>(相當(dāng)于=)操作符。由于是一次定位數(shù)據(jù),不像BTree索引需要從根節(jié)點到枝節(jié)點,最后才能訪問到頁節(jié)點這樣多次IO訪問,所以檢索效率遠高于BTree索引。

8. 索引設(shè)計的原則

適合索引的列是出現(xiàn)在where子句中的列,或者連接子句中指定的列

基數(shù)較小的類,索引效果較差,沒有必要在此列建立索引使用短索引

如果對長字符串列進行索引,應(yīng)該指定一個前綴長度,這樣能夠節(jié)省大量索引空間

不要過度索引。索引需要額外的磁盤空間,并降低寫操作的性能。在修改表內(nèi)容的時候,索引會進行更新甚至重構(gòu),索引列越多,這個時間就會越長。所以只保持需要的索引有利于查詢即可。

9. 創(chuàng)建索引的原則(重中之重)

索引雖好,但也不是無限制的使用,最好符合一下幾個原則

1) 最左前綴匹配原則,組合索引非常重要的原則,mysql會一直向右匹配直到遇到范圍查詢(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)順序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引則都可以用到,a,b,d的順序可以任意調(diào)整。

2)較頻繁作為查詢條件的字段才去創(chuàng)建索引

3)更新頻繁字段不適合創(chuàng)建索引

4)若是不能有效區(qū)分數(shù)據(jù)的列不適合做索引列(如性別,男女未知,最多也就三種,區(qū)分度實在太低)

5)盡量的擴展索引,不要新建索引。比如表中已經(jīng)有a的索引,現(xiàn)在要加(a,b)的索引,那么只需要修改原來的索引即可。

6)定義有外鍵的數(shù)據(jù)列一定要建立索引。

7)對于那些查詢中很少涉及的列,重復(fù)值比較多的列不要建立索引。

8)對于定義為text、image和bit的數(shù)據(jù)類型的列不要建立索引。

10. 創(chuàng)建索引的三種方式,刪除索引

第一種方式:在執(zhí)行CREATE TABLE時創(chuàng)建索引

第二種方式:使用ALTER TABLE命令去增加索引

ALTER TABLE table_name ADD INDEX index_name (column_list);1

ALTER TABLE用來創(chuàng)建普通索引、UNIQUE索引或PRIMARY KEY索引。

其中table_name是要增加索引的表名,column_list指出對哪些列進行索引,多列時各列之間用逗號分隔。

索引名index_name可自己命名,缺省時,MySQL將根據(jù)第一個索引列賦一個名稱。另外,ALTER TABLE允許在單個語句中更改多個表,因此可以在同時創(chuàng)建多個索引。

第三種方式:使用CREATE INDEX命令創(chuàng)建

CREATE INDEX index_name ON table_name (column_list);

CREATE INDEX可對表增加普通索引或UNIQUE索引。(但是,不能創(chuàng)建PRIMARY KEY索引)

刪除索引

根據(jù)索引名刪除普通索引、唯一索引、全文索引:alter table 表名 drop KEY 索引名

alter table user_index drop KEY name;

alter table user_index drop KEY id_card;

alter table user_index drop KEY information;

刪除主鍵索引:alter table 表名 drop primary key(因為主鍵只有一個)。這里值得注意的是,如果主鍵自增長,那么不能直接執(zhí)行此操作(自增長依賴于主鍵索引):

需要取消自增長再行刪除:

alter table user_index–

重新定義字段

MODIFY id int,

drop PRIMARY KEY

但通常不會刪除主鍵,因為設(shè)計主鍵一定與業(yè)務(wù)邏輯無關(guān)。

最后,小編分類整理了許多java進階學(xué)習(xí)材料和BAT面試給熱愛IT行業(yè)的你,如果需要資料的請轉(zhuǎn)發(fā)此文章后再私聊小編回復(fù)【java】就能領(lǐng)取2019年java進階學(xué)習(xí)資料和BAT面試題以及《Effective Java》(第3版)電子版書籍。也可以加群:712263501領(lǐng)取海量學(xué)習(xí)資料進行學(xué)習(xí)。

總結(jié)

以上是生活随笔為你收集整理的MySQL面试题 | 附答案解析(四)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。