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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

盘点那些面试中最常问的MySQL问题

發(fā)布時(shí)間:2023/12/10 数据库 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 盘点那些面试中最常问的MySQL问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ? ? ?

1、MySQL中myisam與innodb的區(qū)別

MyISAM:

  • 不支持事務(wù),但是每次查詢都是原子的;

  • 支持表級(jí)鎖,即每次操作對(duì)整個(gè)表加鎖;

  • 存儲(chǔ)表的總行數(shù);

  • 一個(gè)MYISAM表有三個(gè)文件:索引文件、表結(jié)構(gòu)文件、數(shù)據(jù)文件;

  • 采用非聚集索引,索引文件的數(shù)據(jù)域存儲(chǔ)指向數(shù)據(jù)文件的指針。輔索引與主索引基本一致,但是輔索引不用保證唯一性。

InnoDb:

  • 支持ACID的事務(wù),支持事務(wù)的四種隔離級(jí)別;

  • 支持行級(jí)鎖及外鍵約束:因此可以支持寫(xiě)并發(fā);

  • 不存儲(chǔ)總行數(shù);

  • 一個(gè)InnoDb引擎存儲(chǔ)在一個(gè)文件空間(共享表空間,表大小不受操作系統(tǒng)控制,一個(gè)表可能分布在多個(gè)文件里),也有可能為多個(gè)(設(shè)置為獨(dú)立表空,表大小受操作系統(tǒng)文件大小限制,一般為2G),受操作系統(tǒng)文件大小的限制;

  • 主鍵索引采用聚集索引(索引的數(shù)據(jù)域存儲(chǔ)數(shù)據(jù)文件本身),輔索引的數(shù)據(jù)域存儲(chǔ)主鍵的值;因此從輔索引查找數(shù)據(jù),需要先通過(guò)輔索引找到主鍵值,再訪問(wèn)輔索引;最好使用自增主鍵,防止插入數(shù)據(jù)時(shí),為維持B+樹(shù)結(jié)構(gòu),文件的大調(diào)整。

兩者的適用場(chǎng)景:

因?yàn)镸yISAM相對(duì)簡(jiǎn)單所以在效率上要優(yōu)于InnoDB.如果系統(tǒng)讀多,寫(xiě)少。對(duì)原子性要求低。那么MyISAM最好的選擇。且MyISAM恢復(fù)速度快。可直接用備份覆蓋恢復(fù)。

如果系統(tǒng)讀少,寫(xiě)多的時(shí)候,尤其是并發(fā)寫(xiě)入高的時(shí)候。InnoDB就是首選了。

擴(kuò)展問(wèn)題:myisam與innodb引擎下select count(*)哪個(gè)更快,為什么?

知道的童鞋,歡迎留言說(shuō)出正確答案~

2、MySQL INT和CHAR隱式類(lèi)型轉(zhuǎn)換需要注意什么?

主要需要記住下面兩點(diǎn):

1、當(dāng)查詢字段是INT類(lèi)型,如果查詢條件為CHAR,將查詢條件轉(zhuǎn)換為INT,如果是字符串前導(dǎo)都是數(shù)字,將截取前導(dǎo)數(shù)字用來(lái)比較,如果沒(méi)有前導(dǎo)數(shù)字,則轉(zhuǎn)換為0。

2.、當(dāng)查詢字段是CHAR/VARCHAR類(lèi)型,如果查詢條件為INT,將查詢字段轉(zhuǎn)換為INT再進(jìn)行比較,可能會(huì)造成全表掃描。

答案解析

有如下一張測(cè)試表product,id為int類(lèi)型,name為varchar類(lèi)型。

+----+----------+ |?id?|?name???| +----+----------+ |??1?|?apple???| |??2?|?banana?| |??3?|?99cat???| +----+----------+

情況1:

//?查詢條件轉(zhuǎn)化為數(shù)字1再比較 mysql>?select?*?from?product?where?id?=?\'1abc23\'; +----+---------+ |?id?|?name??| +----+---------+ |??1?|?apple??| +----+---------+

情況2:

//?查詢字段全部轉(zhuǎn)化成數(shù)字,id:1和id:2字段值轉(zhuǎn)化為0,id:3轉(zhuǎn)化成99,再比較 mysql>?select?*?from?product?where?name=0; +----+----------+ |?id?|?name???| +----+----------+ |??1?|?apple???| |??2?|?banana?| +----+----------+

3、MySQL 如何高效率隨機(jī)獲取N條數(shù)據(jù)?

假設(shè)表叫做mm_account。

ID連續(xù)的情況下(注意不能帶where,否則結(jié)果不好):

SELECT?* FROM?`mm_account`?AS?t1?JOIN?(SELECT?ROUND(RAND()?*?(SELECT?MAX(id)?FROM?`mm_account`))?AS?id)?AS?t2 WHERE?t1.id?>=?t2.id ORDER?BY?t1.id?ASC?LIMIT?4;

ID不連續(xù)的情況下:

SELECT?*?FROM?`mm_account`? WHERE?id?>=?(SELECT?floor(RAND()?*?(SELECT?MAX(id)?FROM?`mm_account`)))??and?city="city_91"?and?showSex=1 ORDER?BY?id?LIMIT?4;

如果有一個(gè)字段叫id,最快的方法如下(隨機(jī)獲取5條):

SELECT?*?FROM?mm_account? WHERE?id?>=?((SELECT?MAX(id)?FROM?mm_account)-(SELECT?MIN(id)?FROM?mm_account))?*?RAND()?+?(SELECT?MIN(id)?FROM?mm_account) limit?5;

如果帶where語(yǔ)句,上面就不適合了,帶where語(yǔ)句請(qǐng)看下面:

SELECT?* FROM?`mm_account`?AS?t1?JOIN?(SELECT?ROUND(RAND()?*?( (SELECT?MAX(id)?FROM?`mm_account`?where?id<1000?)-(SELECT?MIN(id)?FROM?`mm_account`?where?id<1000?))+(SELECT?MIN(id)?FROM?`mm_account`?where?id<1000?))?AS?id)?AS?t2 WHERE?t1.id?>=?t2.id ORDER?BY?t1.id?LIMIT?5;

4、說(shuō)說(shuō)你知道的MySQL的索引類(lèi)型,并分別簡(jiǎn)述一下各自的場(chǎng)景。

普通索引:沒(méi)有任何限制條件的索引,該索引可以在任何數(shù)據(jù)類(lèi)型中創(chuàng)建。

唯一索引:使用UNIQUE參數(shù)可以設(shè)置唯一索引。創(chuàng)建該索引時(shí),索引列的值必須唯一,但允許有空值。通過(guò)唯一索引,用戶可以快速地定位某條記錄,主鍵索引是一種特殊的唯一索引。

全文索引:僅可用于 MyISAM 表,針對(duì)較大的數(shù)據(jù),生成全文索引耗時(shí)耗空間。

空間索引:只能建立在空間數(shù)據(jù)類(lèi)型上。這樣可以提高系統(tǒng)獲取空間數(shù)據(jù)類(lèi)型的效率。僅可用于 MyISAM 表,索引的字段不能為空值。使用SPATIAL參數(shù)可以設(shè)置索引為空間索引。

單列索引:只對(duì)應(yīng)一個(gè)字段的索引。

多列索引:在表的多個(gè)字段上創(chuàng)建一個(gè)索引。該索引指向創(chuàng)建時(shí)對(duì)應(yīng)的多個(gè)字段,用戶可以通過(guò)這幾個(gè)字段進(jìn)行查詢,想使用該索引,用戶必須使用這些字段中的一個(gè)字段。

文章推薦程序員效率:畫(huà)流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠(yuǎn)程辦公:常用的遠(yuǎn)程協(xié)助軟件,你都知道嗎?51單片機(jī)程序下載、ISP及串口基礎(chǔ)知識(shí)硬件:斷路器、接觸器、繼電器基礎(chǔ)知識(shí)

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的盘点那些面试中最常问的MySQL问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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