首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 面試高頻題精選:日期函數、安全優化、存儲引擎、SQL 編寫

     編輯:MySQL 綜合教學

題目一:日期時間函數

Q: MySQL 獲取當前日期的函數是?格式化日期的函數是?

A:

  • 當前日期/時間:NOW() (日期時間)、CURDATE() (日期)、CURTIME() (時間)、SYSDATE() (執行瞬間時間,受 SET TIMESTAMP 影響不同)
  • 格式化:DATE_FORMAT(date, format) 如 DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s')
  • 解析:STR_TO_DATE(str, format)
  • 提取部分:YEAR(), MONTH(), DAY(), HOUR(), MINUTE(), SECOND(), WEEK(), QUARTER()
  • 日期運算:DATE_ADD(), DATE_SUB(), DATEDIFF(), TIMESTAMPDIFF()

題目二:安全策略與優化策略

Q: MySQL 安全策略有哪些?優化策略有哪些?

A:

安全策略優化策略
最小權限原則 (按庫/表/列授權)Schema 設計規範化 (3NF) + 適度反規範化
強密碼策略 + 定期輪換 (validate_password 插件)索引優化 (覆蓋索引、前綴索引、避免回表)
禁用/重命名 root、限制訪問源 (IP/網段)SQL 調優 (EXPLAIN、慢查詢分析、避免 SELECT *)
啟用 SSL/TLS 傳輸加密架構優化 (讀寫分離、分庫分表、緩存層)
審計日志 (audit_log 插件)配置調優 (Buffer Pool、IO Capacity、Log File Size)
定期備份 + 異地災備 + 恢復演練硬件升級 (NVMe SSD、大內存、多核 CPU)
禁用不必要功能 (LOAD DATA LOCAL INFILE 等)定期維護 (ANALYZE TABLE、OPTIMIZE TABLE、統計信息更新)

題目三:存儲引擎對比

Q: 寫出三種以上 MySQL 存儲引擎名稱及各自用途。

A:

引擎核心特性適用場景
InnoDB事務(ACID)、行級鎖、MVCC、外鍵、崩潰恢復、聚簇索引核心業務、高併發讀寫、數據一致性要求高 (默認首選)
MyISAM表級鎖、全文索引(5.6 前)、壓縮表、無事務、無外鍵只讀/讀多寫少、日志/歸檔表、全文搜索(舊版)
Memory (HEAP)數據在內存、Hash 索引默認、重啟丟失、表級鎖臨時表、查找表、緩存層、會話數據 (數據可重建)
Archive僅支持 INSERT/SELECT、行壓縮(Zlib)、無索引、無事務海量日志歸檔、審計數據、寫一次讀極少
CSV數據存 CSV 文本、無索引、全表掃描數據交換、外部工具處理、簡單導入導出
NDB Cluster分佈式、內存為主、高可用、自動分片電信級高可用、極低延遲、跨數據中心同步

題目四:SQL 編寫 - 論壇主題按回覆量排序

Q: 論壇有一個主題表 topics,一個回覆表 replies,寫 SQL 輸出按回覆量排序的主題列表。

A:


-- 假設結構
-- topics: id, title, create_time
-- replies: id, topic_id, content, create_time

-- 方案 1:子查詢 (直觀)
SELECT t.*, 
       (SELECT COUNT(*) FROM replies r WHERE r.topic_id = t.id) AS reply_count
FROM topics t
ORDER BY reply_count DESC;

-- 方案 2:JOIN + GROUP BY (大數據量通常更快)
SELECT t.id, t.title, t.create_time, COUNT(r.id) AS reply_count
FROM topics t
LEFT JOIN replies r ON t.id = r.topic_id
GROUP BY t.id, t.title, t.create_time
ORDER BY reply_count DESC;

-- 方案 3:衍生表/關聯子查詢 (避免大表 GROUP BY)
SELECT t.*, COALESCE(r.cnt, 0) AS reply_count
FROM topics t
LEFT JOIN (
    SELECT topic_id, COUNT(*) AS cnt FROM replies GROUP BY topic_id
) r ON t.id = r.topic_id
ORDER BY reply_count DESC;

加分點:說明索引建議 (replies(topic_id))、大數據量分頁優化 (WHERE reply_count > ... 游標分頁)、緩存策略 (Redis 存熱門主題回覆數)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved