Java面試經(jīng)典題目五(MySQL基礎(chǔ)知識(shí))

MySQL數(shù)據(jù)庫部分

【1】MySQL中Where, Group By, Having, Order by執(zhí)行順序?

【例子】按由高到低的順序顯示個(gè)人平均分在70分以上的學(xué)生姓名和平均分,為了盡可能地提高平均分,在計(jì)算平均分前不包括分?jǐn)?shù)在60分以下的成績(jī),并且也不計(jì)算小明(xiaoming)的成績(jī)。?分析:

1.要求顯示學(xué)生姓名和平均分

因此確定第1步select?s_name,avg(s_score)?from?student

2.計(jì)算平均分前不包括分?jǐn)?shù)在60分以下的成績(jī),并且也不計(jì)算小明(xiaoming)的成績(jī)

因此確定第2步wheres_score>=60?and?s_name!=’xiaoming’

3.顯示個(gè)人平均分,相同名字的學(xué)生(同一個(gè)學(xué)生)考了多門科目

因此按姓名分組,確定第3步group?bys_name

4.顯示個(gè)人平均分在70分以上

因此確定第4步having?avg(s_score)>=70

5.按由高到低的順序

因此確定第5步order?byavg(s_score)?desc

完整SQL語句:

select s_name,avg(s_score) from student where s_score>=60 and s_name !='xiaoming' group by s_name having avg(s_score) >=70 order by avg(s_score) desc;

【2】MySQL中myisam與innodb的區(qū)別?

答:兩種類型最主要的差別就是Innodb?支持事務(wù)處理與外鍵行級(jí)鎖。而MyISAM不支持.所以MyISAM往往就容易被人認(rèn)為只適合在小項(xiàng)目中使用。

【3】數(shù)據(jù)庫優(yōu)化方法

答:1、選取最適用的字段屬性,是在可能的情況下,應(yīng)該盡量把字段設(shè)置為NOTNULL;

2.使用連接(JOIN)來代替子查詢(Sub-Queries)

3.使用聯(lián)合(UNION)來代替手動(dòng)創(chuàng)建的臨時(shí)表

4.盡管事務(wù)是維護(hù)數(shù)據(jù)庫完整性的一個(gè)非常好的方法,但卻因?yàn)樗莫?dú)占性,有時(shí)會(huì)影響數(shù)據(jù)庫的性能,尤其是在很大的應(yīng)用系統(tǒng)中。有些情況下我們可以通過鎖定表的方法來獲得更好的性能。

5.鎖定表的方法可以維護(hù)數(shù)據(jù)的完整性,但是它卻不能保證數(shù)據(jù)的關(guān)聯(lián)性。這個(gè)時(shí)候我們就可以使用外鍵。

6.使用索引。索引應(yīng)建立在那些將用于JOIN,WHERE判斷和ORDERBY排序的字段上。

7.使用索引可以提高查詢的速度,但如果SQL語句使用不恰當(dāng)?shù)脑?,索引將無法發(fā)揮它應(yīng)有的作用。

【4】MySQL中索引的原理是什么?

答:[詳細(xì)參考]

這里設(shè)表一共有三列,假設(shè)我們以Col1為主鍵,則圖8是一個(gè)MyISAM表的主索引(Primary key)示意??梢钥闯鯩yISAM的索引文件僅僅保存數(shù)據(jù)記錄的地址。在MyISAM中,主索引和輔助索引(Secondary key)在結(jié)構(gòu)上沒有任何區(qū)別,只是主索引要求key是唯一的,而輔助索引的key可以重復(fù)。如果我們?cè)贑ol2上建立一個(gè)輔助索引,則此索引的結(jié)構(gòu)如下圖所示:

同樣也是一棵B+Tree,data域保存數(shù)據(jù)記錄的地址。因此,MyISAM中索引檢索的算法為首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,則取出其data域的值,然后以data域的值為地址,讀取相應(yīng)數(shù)據(jù)記錄。

MyISAM的索引方式也叫做“非聚集”的,之所以這么稱呼是為了與InnoDB的聚集索引區(qū)分。

InnoDB索引實(shí)現(xiàn)

雖然InnoDB也使用B+Tree作為索引結(jié)構(gòu),但具體實(shí)現(xiàn)方式卻與MyISAM截然不同。

第一個(gè)重大區(qū)別是InnoDB的數(shù)據(jù)文件本身就是索引文件。從上文知道,MyISAM索引文件和數(shù)據(jù)文件是分離的,索引文件僅保存數(shù)據(jù)記錄的地址。而在InnoDB中,表數(shù)據(jù)文件本身就是按B+Tree組織的一個(gè)索引結(jié)構(gòu),這棵樹的葉結(jié)點(diǎn)data域保存了完整的數(shù)據(jù)記錄。這個(gè)索引的key是數(shù)據(jù)表的主鍵,因此InnoDB表數(shù)據(jù)文件本身就是主索引。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 50個(gè)常用的sql語句Student(S#,Sname,Sage,Ssex) 學(xué)生表Course(C#,Cname...
    哈哈海閱讀 1,334評(píng)論 0 7
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,017評(píng)論 0 11
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,740評(píng)論 18 399
  • 說明:以下五十個(gè)語句都按照測(cè)試數(shù)據(jù)進(jìn)行過測(cè)試,最好每次只單獨(dú)運(yùn)行一個(gè)語句。 問題及描述: --1.學(xué)生表 Stud...
    lijun_m閱讀 1,387評(píng)論 0 1
  • 一大早還是要聽燃一點(diǎn)的音樂,比喝咖啡喝茶還有用。 剛過馬路等紅燈的時(shí)候,天真的好藍(lán) 。博洛尼亞的天氣難得這么好。突...
    一四囍閱讀 182評(píng)論 0 0

友情鏈接更多精彩內(nèi)容