Mysql面試題總結(基礎篇)——不斷更新

1. SQL 的 select 語句完整的執行順序

1、from 子句組裝來自不同數據源的數據;
2、where 子句基於指定的條件對記錄行進行篩選;
3、group by 子句將數據劃分爲多個分組;
4、使用聚集函數進行計算;
5、使用 having 子句篩選分組;
6、計算所有的表達式;
7、select 的字段;
8、使用 order by 對結果集進行排序

2. SQL 之連接查詢(左連接和右連接的區別)

外連接:
左連接(左外連接):以左表作爲基準進行查詢,左表數據會全部顯示出來,右表如果和左表匹配的數據則顯示相應字段的數據,如果不匹配則顯示爲 null。
右連接(右外連接):以右表作爲基準進行查詢,右表數據會全部顯示出來,左表如果和右表匹配的數據則顯示相應字段的數據,如果不匹配則顯示爲 null。
全連接:先以左表進行左外連接,再以右表進行右外連接。
內連接:
顯示錶之間有連接匹配的所有行。

3、Mysql 性能優化

1、當只要一行數據時使用 limit 1查詢時如果已知會得到一條數據,這種情況下加上 limit 1 會增加性能。因爲 mysql 數據庫引擎會在找到一條結果停止搜索,而不是繼續查詢下一條是否符合標準直到所有記錄查詢完畢。
2、選擇正確的數據庫引擎Mysql 中有兩個引擎 MyISAM 和 InnoDB,每個引擎有利有弊。
MyISAM 適用於一些大量查詢的應用,但對於有大量寫功能的應用不是很好。甚至你只需要update 一個字段整個表都會被鎖起來。而別的進程就算是讀操作也不行要等到當前 update 操作完成之後才能繼續進行。另外,MyISAM 對於 select count(*)這類操作是超級快的。InnoDB 的趨勢會是一個非常複雜的存儲引擎,對於一些小的應用會比 MyISAM 還慢,但是支持“行鎖”,所以在寫操作比較多的時候會比較優秀。並且,它支持很多的高級應用,例如:事物。
3. 用 not exists 代替 not inNot exists 用到了連接能夠發揮已經建立好的索引的作用,not in 不能使用索引。Not in 是最慢的方式要同每條記錄比較,在數據量比較大的操作紅不建議使用這種方式。
4. 對操作符的優化,儘量不採用不利於索引的操作符。如:in not in is null is not null <> 等
某個字段總要拿來搜索,爲其建立索引:Mysql 中可以利用 alter table 語句來爲表中的字段添加索引,
語法爲:
    alter table 表名 add index (字段名);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章