愛因斯坦說過“耐心和恒心總會得到報酬的”恭垦,我也一直把這句話當做自己的座右銘,這句箴言在今年也徹底在“我”身上實現(xiàn)了。
每一個程序員都擁有一座大廠夢番挺,我也不例外唠帝,去年面試阿里,竟然被MySQL問倒了建芙,很多相關性的問題都沒有答上來没隘,才2面就涼涼了懂扼。為面試做了很多準備禁荸,收集很多關于MySQL面試題
MySQL有哪些特性?
- 使用C和C++編寫阀湿,并使用了多種編譯器進行測試赶熟,保證源代碼的可移植性
- 支持AIX、FreeBSD陷嘴、HP-UX映砖、Linux、MacOS灾挨、Novell Netware邑退、OpenBSD、OS/2 Wrap劳澄、Solaris地技、Windows等多種操作系統(tǒng)
- 為多種編程語言提供了API。這些編程語言包括C秒拔、C++莫矗、Python、Java砂缩、Perl作谚、PHP、Eiffel庵芭、Ruby和Tcl等妹懒。
- 支持多線程,充分利用CPU資源
- 化的SQL查詢算法双吆,有效地提高查詢速度
- 既能夠作為一個單獨的應用程序應用在客戶端服務器網(wǎng)絡環(huán)境中眨唬,也能夠作為一個庫而嵌入到其他的軟件中提供多語言支持,常見的編碼如中文的GB 2312伊诵、BIG5单绑,日文的Shift_JIS等都可以用作數(shù)據(jù)表名和數(shù)據(jù)列名
- 提供TCP/IP、ODBC和JDBC等多種數(shù)據(jù)庫連接途徑
- 提供用于管理曹宴、檢查搂橙、優(yōu)化數(shù)據(jù)庫操作的管理工具
- 可以處理擁有上千萬條記錄的大型數(shù)據(jù)庫
走進MySQL的世界
1、MySQL 性能優(yōu)化的 21 個最佳實踐
- 為查詢緩存優(yōu)化你的查詢
- EXPLAIN 你的 SELECT 查詢
- 當只要一行數(shù)據(jù)時使用 LIMIT 1
- 為搜索字段建索引
- 在 Join 表的時候使用相當類型的例,并將其索引
- 千萬不要 ORDER BY RAND()
- 避免 SELECT *
- 永遠為每張表設置一個 ID
- 使用 ENUM 而不是 VARCHAR
- 從 PROCEDURE ANALYSE() 取得建議
- 盡可能的使用 NOT NULL
- Prepared Statements
- 無緩沖的查詢
- 把 IP 地址存成 UNSIGNED INT
- 固定長度的表會更快
- 垂直分割
- 拆分大的 DELETE 或 INSERT 語句
- 越小的列會越快
- 選擇正確的存儲引擎
- 選擇正確的存儲引擎
- 小心“永久鏈接”
2区转、MySQL面試題總結(jié)
之前的阿里面試題都有做總結(jié)苔巨,具體面試題內(nèi)容整理成了文檔,本文是針對MySQL系列的废离,所以下面只展示了自己第一次面試阿里時被吊打問到的一些MySQL難題侄泽,下面是今年面試阿里遇到MySQL的題目。
2.1.其他專題內(nèi)容(含答案)的文檔資料蜻韭,點擊此處即可領取!悼尾。
- 請解釋關系型數(shù)據(jù)庫概念及主要特點?
- 請說出關系型數(shù)據(jù)庫的典型產(chǎn)品肖方、特點及應用場景闺魏?
- 請詳細描述 SQL 語句分類及對應代表性關鍵字。
- 什么是 MySQL 多實例俯画,如何配置 MySQL 多實例析桥?
- 如何加強 MySQL 安全,請給出可行的具體措施艰垂?
- 誤操作執(zhí)行了一個 drop 庫 SQL 語句泡仗,如何完整恢復?
- 詳述 MySQL 主從復制原理及配置主從的完整步驟猜憎。
- MySQL 如何實現(xiàn)雙向互為主從復制娩怎,并說明應用場景?
- MySQL 如何實現(xiàn)級聯(lián)同步拉宗,并說明應用場景峦树?
- MySQL 主從復制故障如何解決?
2.2.MySQL55道面試專題你能答出多少旦事?
- 一張表魁巩,里面有 ID 自增主鍵,當 insert 了 17 條記錄之后姐浮,刪除了第 15,16,17 條記錄谷遂,再把 Mysql 重啟,再 insert 一條記錄卖鲤,這條記錄的 ID 是 18 還是 15 肾扰?
- Mysql 的技術(shù)特點是什么?
- Heap表是什么蛋逾?
- Mysql 服務器默認端口是什么集晚?
- 與 Oracle 相比,Mysql 有什么優(yōu)勢区匣?
- 如何區(qū)分 FLOAT 和 DOUBLE偷拔?
- 區(qū)分 CHAR_LENGTH 和 LENGTH?
- 請簡潔描述 Mysql 中 InnoDB 支持的四種事務隔離級別名稱,以及逐級之間的區(qū)別莲绰?
- 在 Mysql 中 ENUM 的用法是什么欺旧?
- 如何定義 REGEXP?
- CHAR 和 VARCHAR 的區(qū)別蛤签?
- 列的字符串類型可以是什么辞友?
- 如何獲取當前的 Mysql 版本?
- Mysql 中使用什么存儲引擎震肮?
- Mysql 驅(qū)動程序是什么称龙?
- TIMESTAMP 在 UPDATE CURRENT_TIMESTAMP 數(shù)據(jù)類型上做什么?
- 主鍵和候選鍵有什么區(qū)別钙蒙?
- 如何使用 Unix shell 登錄 Mysql茵瀑?
- myisamchk 是用來做什么的间驮?
- MYSQL 數(shù)據(jù)庫服務器性能分析的方法命令有哪些?
- 如何控制 HEAP 表的最大尺寸躬厌?
- MyISAM Static 和 MyISAM Dynamic 有什么區(qū)別?
- federated 表是什么竞帽?
- 如果一個表有一列定義為 TIMESTAMP扛施,將發(fā)生什么?
- 列設置為 AUTO INCREMENT 時屹篓,如果在表中達到最大值疙渣,會發(fā)生什么情況?
- 怎樣才能找出最后一次插入時分配了哪個自動增量堆巧?
- 你怎么看到為表格定義的所有索引妄荔?
- LIKE 聲明中的%和_是什么意思?
- 如何在 Unix 和 Mysql 時間戳之間進行轉(zhuǎn)換谍肤?
- 列對比運算符是什么啦租?
- 我們?nèi)绾蔚玫绞懿樵冇绊懙男袛?shù)?
- Mysql 查詢是否區(qū)分大小寫荒揣?
- LIKE 和 REGEXP 操作有什么區(qū)別篷角?
- BLOB 和 TEXT 有什么區(qū)別?
- mysql_fetch_array 和 mysql_fetch_object 的區(qū)別是什么系任?
- 我們?nèi)绾卧?mysql 中運行批處理模式恳蹲?
- MyISAM 表格將在哪里存儲,并且還提供其存儲格式俩滥?
- Mysql 中有哪些不同的表格嘉蕾?
- ISAM 是什么?
- InnoDB 是什么霜旧?
- Mysql 如何優(yōu)化 DISTINCT错忱?
- 如何輸入字符為十六進制數(shù)字?
- 如何顯示前 50 行?
- 可以使用多少列創(chuàng)建索引航背?
- NOW()和 CURRENT_DATE()有什么區(qū)別喉悴?
- 什么樣的對象可以使用 CREATE 語句創(chuàng)建?
- Mysql 表中允許有多少個 TRIGGERS玖媚?
- 什么是非標準字符串類型箕肃?
- 什么是通用 SQL 函數(shù)?
- 解釋訪問控制列表
- MYSQL 支持事務嗎今魔?
- mysql 里記錄貨幣用什么字段類型好
- MYSQL 數(shù)據(jù)表在什么情況下容易損壞勺像?
- mysql 有關權(quán)限的表都有哪幾個?
- Mysql 中有哪幾種鎖错森?
3吟宦、MySQL 性能調(diào)優(yōu)與架構(gòu)設計
- 基礎篇:
- MySQL基本介紹
- MySQL架構(gòu)組成
- MySQL存儲引擎簡介
- MySQL安全管理
- MySQL備份與恢復
- 性能優(yōu)化篇:
- 影響MySQLServer性能的相關因素
- MySQL數(shù)據(jù)庫鎖定機制
- MySQL數(shù)據(jù)庫Query的優(yōu)化
- MySQL數(shù)據(jù)庫Schema設計的性能優(yōu)化
- MySQLServer性能優(yōu)化
- 常用存儲引擎優(yōu)化
- 架構(gòu)設計篇:
- MySQL可擴展設計的基本原則
- 可擴展性設計之MySQLReplication
- 可擴展性設計之數(shù)據(jù)切分
- 可擴展性設計之Cache與Search的..
- MySQLCluster
- 高可用設計之思路及方案
- 高可用設計之MySQL監(jiān)控
MySQL架構(gòu)與歷史
和其他數(shù)據(jù)庫系統(tǒng)相比,MySQL有點與眾不同涩维,它的架構(gòu)可以在多種不同場景中應用并發(fā)揮好的作用殃姓,但同時也會帶來-點選擇上的困難。MySQL并不完美瓦阐,卻足夠靈活蜗侈,能夠適應高要求的環(huán)境,例如Web類應用睡蟋。同時踏幻,MySQL既可以嵌入到應用程序中,也可以支持數(shù)據(jù)倉庫戳杀、內(nèi)容索引和部署軟件该面、高可用的冗余系統(tǒng)、在線事務處理系統(tǒng)(OLTP)等各種應用類型信卡。
轉(zhuǎn)發(fā)+關注后點擊此處即可領取!即可免費領取史上最全MySQL實戰(zhàn)文檔
服務器性能剖析
在我們的技術(shù)咨詢生涯中隔缀,最常碰到的三個性能相關的服務請求是:如何確認服務器是否達到了性能最佳的狀態(tài)、找出某條語句為什么執(zhí)行不夠快坐求,以及診斷被用戶描述成“停頓"蚕泽、“堆積"或者“卡死"的某些間歇性疑難故障。本章將主要針對這三個問題做出解答桥嗤。我們將提供- - 些工具和技巧來優(yōu)化整機的性能须妻、優(yōu)化單條語句的執(zhí)行速度,以及診斷或者解決那些很難觀察到的問題(這些問題用戶往往很難知道其根源泛领,有時候甚至都很難察覺到它的存在)荒吏。
查詢性能優(yōu)化
前面是介紹了如何設計最優(yōu)的庫表結(jié)構(gòu)、如何建立最好的索引渊鞋,這些對于高性能來說是必不可少的绰更。但這些還不夠一還需 要合理的設計查詢瞧挤。如果查詢寫得很糟糕,即使庫表結(jié)構(gòu)再合理儡湾、索引再合適特恬,也無法實現(xiàn)高性能。
MySQL高級特性
MySQL從5.0和5.1版本開始引入了很多高級特性徐钠,例如分區(qū)癌刽、觸發(fā)器等,這對有其他關系型數(shù)據(jù)庫使用背景的用戶來說可能并不陌生尝丐。這些新特性吸引了很多用戶開始使用MySQL显拜。不過,這些特性的性能到底如何爹袁,還需要用戶真正使用過才能知道远荠。這里我們將為大家介紹,在真實的世界中失息,這些特性表現(xiàn)如何譬淳,而不是只簡單地介紹參考手冊或者宜傳材料.上的數(shù)據(jù)。
轉(zhuǎn)發(fā)+關注后點擊此處即可領取!即可免費領取史上最全MySQL實戰(zhàn)文檔
優(yōu)化服務器設置
這里我們將解釋為MySQL服務器創(chuàng)建一個靠譜的配置文件的過程根时。這是一個很繞的過程瘦赫,有很多有意思的關注點和值得關注的思路。關注這些點很有必要蛤迎,因為創(chuàng)建個好配置的最快方法不是從學習配置項開始,也不是從問哪個配置項應該怎么設置或者怎么修改開始含友,更不是從檢查服務器行為和詢問哪個配置項可以提升性能開始替裆。
最好是從理解MySQL內(nèi)核和行為開始。然后可以利用這些知識來指導配置MySQL.最后窘问,可以將想要的配置和當前配置進行比較辆童,然后糾正重要并且有價值的不同之處。
轉(zhuǎn)發(fā)+關注后點擊此處即可領取!即可免費領取史上最全MySQL實戰(zhàn)文檔
復制
MySQL內(nèi)建的復制功能是構(gòu)建基于MySQL的大規(guī)模惠赫、高性能應用的基礎把鉴,這類應用使用所謂的“水平擴展”的架構(gòu)。我們可以通過為服務器配置一個或多個備庫生1的方式來進行數(shù)據(jù)同步儿咱。復制功能不僅有利于構(gòu)建高性能的應用庭砍,同時也是高可用性、可擴展性混埠、災難恢復怠缸、備份以及數(shù)據(jù)倉庫等工作的基礎。事實上钳宪,可擴展性和高可用性通常是相關聯(lián)的話題揭北,我們會在接下來的三章詳細闡述扳炬。
可擴展的MySQL
在此將展示如何構(gòu)建-一個 基于MySQL的應用,并且當規(guī)模變得越來越龐大時搔体,還能保證快速恨樟、高效并且經(jīng)濟。有些應用僅僅適用于--臺或少數(shù)幾臺服務器疚俱,那么哪些可擴展性建議是和這些應用相關的呢?大多數(shù)人從不會維護超大規(guī)模的系統(tǒng)厌杜,井且通常也無法效仿在主流大公司所使用的策略。本章會涵蓋這- - 系列的策略计螺。我們已經(jīng)建立或者協(xié)助建立了許多應用夯尽,包括從單臺或少量服務器的應用到使用上千臺服務器的應用。選擇一個合適的策略能夠大大地節(jié)約時間和金錢登馒。MySQL經(jīng)常被批評很難進行擴展匙握,有些情況下這種看法是正確的,但如果選擇正確的架構(gòu)并很好地實現(xiàn)陈轿,就能夠非常好地擴展MySQL.但是擴展性并不是-一個很好理解的主題圈纺,所以我們先來理清- -些容易混淆的地方。
云端的MySQL
應用層優(yōu)化
如果在提高MySQL的性能上花費太多時間麦射,容易使視野局限于MySQL本身蛾娶,而忽略了用戶體驗∏鼻铮回過頭來看蛔琅,也許可以意識到,或許MySQL已經(jīng)足夠優(yōu)化峻呛,對于用戶看到的響應時間而言罗售,其所占的比重已經(jīng)非常之小,此時應該關注下其他部分了钩述。這是個很不錯的觀點寨躁,尤其是對DBA而言,這是很值得去做的正確的事牙勘。但如果不是MySQL职恳,那又是什么導致了問題呢?使用第3章提到的技術(shù),通過測量可以快速而準確地給出答案方面。如果能順著應用的邏輯過程從頭到尾來剖析放钦,那么找到問題的源頭一般來說并不困難。有時葡幸,盡管問題在MySQL.上最筒,也很容易在系統(tǒng)的另一部分得到解決。
備份和恢復
如果沒有提前做好備份規(guī)劃蔚叨,也許以后會發(fā)現(xiàn)已經(jīng)錯失了- -些最佳的選擇床蜘。例如辙培,在服務器已經(jīng)配置好以后豁跑,才想起應該使用LVM罗岖,以便可以獲取文件系統(tǒng)的快照一但這時已經(jīng)太遲了。在為備份配置系統(tǒng)參數(shù)時怕享,可能沒有注意到某些系統(tǒng)配置對性能有著重要影響丹擎。如果沒有計劃做定期的恢復演練尾抑,當真的需要恢復時,就會發(fā)現(xiàn)并沒有那么順利蒂培。
MySQL用戶工具
MySQL服務器發(fā)行包中并沒有包含針對許多常用任務的工具再愈,例如監(jiān)控服務器或比較不同服務器間數(shù)據(jù)的工具。幸運的是护戳,Oracle 的商業(yè)版提供了- -些擴展工具翎冲,并且MySQL活躍的開源社區(qū)和第三方公司也提供了- -系列的工具,降低了自己“重復發(fā)明輪子”的需要媳荒。