[3]Java开发实习面试打卡
[2]Java開發(fā)實習面試打卡
1.創(chuàng)建索引的原則(重中之重)
最好符合以下幾個原則: 1.最左前綴匹配原則,組合索引非常重要的原則,mysql會一直向右匹配直到遇到范圍查詢(>,<,between,like)就停止匹配. 2.較頻繁作為查詢條件的字段才去創(chuàng)建索引 3.更新頻繁字段不適合創(chuàng)建索引 4.若是不能有效區(qū)分數(shù)據(jù)的列不適合做索引列. 5.盡量的擴展索引,不要新建索引.比如表中有a的索引,現(xiàn)在要加(a,b)的索引,那么只需要修改原來的索引即可. 6.定義有外鍵的數(shù)據(jù)列一定要建立索引. 7.對于那些查詢中很少涉及的列,重復值比較多的列不要建立索引. 8.對于定義為text,image和bit的數(shù)據(jù)類型的列不要建立索引.2.創(chuàng)建索引的三種方式,刪除索引
2.1. 第一種 CREATE TABLE
在執(zhí)行CREATE TABLE時創(chuàng)建索引
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.2. 第二種 ALTER TABLE
使用ALTER TABLE命令去增加索引
ALTER TABLE table_name ADD INDEX index_name(column_list);ALTER TABLE 用來創(chuàng)建普通索引,UNIQUE索引或PRIMARY KEY索引
2.3.第三種 CREATE INDEX
CREATE INDEX index_name ON table_name (column_list);CREATE INDEX可對表增加普通索引或UNIQUE索引(不能創(chuàng)建PRIMARY KEY 索引)
2.4.刪除索引
根據(jù)索引名刪除普通索引,唯一索引,全文索引: alter table 表名 drop KEY 索引名 刪除主鍵索引: alter table 表名 drop primary key(因為主鍵只有一個)如果主鍵自增長,那么不能直接執(zhí)行此操作(自增長依賴于主鍵索引);需要取消自增長再行刪除,但通常不會刪除主鍵.
3.創(chuàng)建索引時需要注意什么?
- 非空字段:應該指定列為NOT NULL,除非你想存儲NULL.在mysql中,含有空值的列很難進行查詢優(yōu)化,因為他們使得索引,索引的統(tǒng)計信息以及比較運算更加復雜.你應該用0、一個特殊的值或一個空串代替空值.
- 取值離散大的字段:(變量各個取值之間的差異程度)的列放到聯(lián)合索引的前面,可以通過count()函數(shù)查看字段的差異值,返回值越大說明字段的唯一值越多的字段的離散程度高.
- 索引字段越小越好:數(shù)據(jù)庫的數(shù)據(jù)存儲以頁為單位一頁存儲的數(shù)據(jù)越多一次IO操作獲取的數(shù)據(jù)越大效率越高.
4.百萬級別或以上的數(shù)據(jù)如何刪除
1.可以先刪除索引 2.然后刪除其中無用數(shù)據(jù) 3.刪除完成后重新創(chuàng)建索引5.B樹和B+樹的區(qū)別
- 在B樹中,你可以將鍵和值存放在內(nèi)部節(jié)點和葉子節(jié)點;但在B+樹中,內(nèi)部節(jié)點都是鍵,沒有值,葉子節(jié)點同時存放鍵和值.
- B+樹的葉子節(jié)點有一條鏈相連,而B樹的葉子節(jié)點各自獨立.
5.1.使用B樹的好處
B樹可以在內(nèi)部節(jié)點同時存儲鍵和值,因此,把頻繁訪問的數(shù)據(jù)放在靠近根節(jié)點的地方將會大大提高熱點數(shù)據(jù)的查詢效率.這種特性使得B樹在特定數(shù)據(jù)重復多次查詢的場景中更加高效.
5.2.使用B+樹的好處
由于B+樹內(nèi)部節(jié)點只存放鍵,不存放值,因此,一次讀取,可以在內(nèi)存頁中獲取更多的鍵,有利于更快的縮小查找范圍.
B+樹的葉節(jié)點由一條鏈相連,因此,當需要進行一次全數(shù)據(jù)遍歷的時候,B+樹只需要找到最小的節(jié)點,然后進行順序遍歷.而B樹需要每一層進行遍歷,花費更多時間.
6.Hash索引和B+樹索引有什么區(qū)別或者說優(yōu)劣
- hash索引進行等值查詢更快(一般情況下),但是無法進行范圍查詢.
- hash索引不支持使用索引進行排序
- hash索引不支持模糊查詢以及多列索引的最左前綴匹配.
- hash索引任何時候都避免不了回表查詢數(shù)據(jù),而B+樹在符合某些條件(聚族索引,覆蓋索引等)的時候可以只通過索引完成查詢
- hash索引雖然在等值查詢上較快,但是不穩(wěn)定.
因此,在大多數(shù)情況下,直接選擇B+樹索引可以獲得穩(wěn)定且較好的查詢速度.
7.數(shù)據(jù)庫為什么使用B+樹而不是B樹
- B樹只適合隨機檢索,而B+樹同時支持隨機檢索和順序檢索
- B+樹空間利用率更高,可減少I/O次數(shù),磁盤讀寫代價更低.
- B+樹的查詢效率更加穩(wěn)定.
- B樹在提高了磁盤IO性能的同時并沒有解決元素遍歷的效率低下的問題.
- 增刪文件(節(jié)點)時,效率更高.因為B+樹的葉子節(jié)點包含所有的關鍵字,并以有序的兩邊結構存儲,這樣可很好提高增刪效率.
8.什么是聚簇索引?
- 聚簇索引:將數(shù)據(jù)存儲與索引放到了一塊,找到索引也就找到了數(shù)據(jù)
- 非聚簇索引:將數(shù)據(jù)存儲與索引分開結構,索引結構的葉子節(jié)點指向了數(shù)據(jù)的對應行.
9.非聚簇索引一定會回表查詢嗎
不一定, 如果要求的字段命中了索引,就不必回表查詢.10.聯(lián)合索引是什么?為什么需要注意聯(lián)合索引中的順序?
MySQL可以多個字段同時建立一個索引,叫做聯(lián)合索引.在聯(lián)合索引中,如果想要命中索引,需要按照建立索引時的字段順序挨個使用,否則無法命中索引.[4]Java開發(fā)實習面試打卡
總結
以上是生活随笔為你收集整理的[3]Java开发实习面试打卡的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于Python的迭代操作
- 下一篇: 霍夫变换原理说明