1.行級鎖定的缺點:
比頁級或表級鎖定占用更多的內存。當在表的大部分中使用時,比頁級或表級鎖定速度慢,因為你必須獲取更多的鎖。 如果你在大部分數據上經常進行GROUP BY操作或者必須經常掃描整個表,比其它鎖定明顯慢很多。 用高級別鎖定,通過支持不同的類型鎖定,你也可以很容易地調節應用程序,因為其鎖成本小于行級鎖定。
2.MySQL優化
- 開啟查詢緩存,優化查詢
- explain你的select查詢, 這可以幫你分析你的查詢語句或是表結構的性能瓶頸。EXPLAIN的查詢結果還會告訴你你的索引 主鍵被如何利用的,你的數據表是如何被搜索和排序的
- 當只要一行數據時使用limit 1, MySQL數據庫引擎會在找到一條數據后停止搜索,而不是繼續往后查少下一條符合記錄的數據
- 為搜索字段建索引
- 使用ENUM而不是VARCHAR
- Prepared StatementsPrepared Statements很像存儲過程,是一種運行在后臺的SQL語句集合,我們可以從使用
prepared statements獲得很多好處,無論是性能問題還是安全問題。
Prepared Statements可以檢查一些你綁定好的變量,這樣可以保護你的程序不會受到“SQL注入式” 攻擊
3.key和index的區別
key是數據庫的物理結構,它包含兩層意義和作用,一是約束(偏 重于約束和規范數據庫的結構完整性) ,二是索引(輔助查詢 用的)。包括primary key, unique key, foreign key等
index是數據庫的物理結構,它只是輔助查詢的,它創建時會在另外的表空間(mysql中的innodb表空間) 以-個類似目錄的結 構存儲。索引要分類的話,分為前綴索引、全文本索引等;
4.Mysql 中MyISAM和InnoDB的區別有哪些?
- InnoDB支持事務, MyISAM不支持
- InnoDB支持外鍵,而MylSAM不支持。對一個包含外鍵的InnoDB表轉為MYISAM會失敗;
- InnoDB是聚集索引,數據文件是和索引綁在一起,必須要有主鍵,通過主鍵索引效率高。
- InnoDB不保存 表的具體行數,執行select count(*) from table時需要全表掃描。
- Innodb不支持全文索引,而MyISAM支持全文索引,查詢效率上MyISAM要高;
5.數據庫表創建注意事項
1、字段名及字段配制合理性
- 剔除關系不密切的字段; 1字段命名要有規則及相對應的含義(不要一部分英文,一部分拼音,還有類似a.b.c這樣不明含義的字段) ;
- 字段命名盡量不要使用縮寫(大多數縮寫都不能明確字段含義) ;
- 字段不要大小寫混用(想要具有可讀性,多個英文單詞可使用下劃線形式連接) ;
- 字段名 不要使用保留字或者關鍵字;
- 保持字段名和類型的一致性;
- 慎重選擇數字類型; 給文本字段留足余量;
2、系統特殊字段處理及建成后建議
- 添加刪除標記(例如操作人、刪除時間) ;
- 建立版本機制;
3、表結構合理性配置
- 多型字段的處理 ,就是表中是否存在字段能夠分解成更小獨立的幾部分(例如:人可以分為男人和女人) ;
- 多值字段的處理,可以將表分為三張表,這樣使得檢索和排序更加有調理,且保證數據的完整性!
4、其它建議
- 對于大數據字段,獨立表進行存儲,以便影響性能(例如:簡介字段) ;
- 使用varchar類 型代替char,因為varchar 會動態分配長度,char指定長度是固定的; 給表創建主鍵,對于沒有主鍵的表,在查詢和索引定義上有一定的影響;
- 避免表字段運行為null,建議設置默認值(例如: int類型設置默認值為0) 在索引查詢上,效率立顯; 1建立索引,最好建立在唯-和非空的字段上,建立太多的索引對后期插入、更新都存在一定的影響(考慮實際情況來創建) ;
以上就是“比較難掌握的幾道數據庫面試題及答案”,你能回答上來嗎?如果想要了解更多的Java面試題相關內容,可以關注動力節點Java官網。