MySQL面試題之如何優化一條有問題的SQL語句?

2022-03-22 05:05:10 字數 1315 閱讀 3954

如何優化一條有問題的sql語句?

針對sql語句的優化。我們可以從如下幾個角度去分析

回歸到表的設計層面,資料型別選擇是否合理

大表碎片的整理是否完善

表的統計資訊,是不是準確的

審查表的執行計畫,判斷字段上面有沒有合適的索引

針對索引的選擇性,建立合適的索引(就又涉及到大表ddl的操作問題)

我們看第一點:資料型別要選取合適一些才好。

1)比如建議使用int來儲存ipv4的型別,然後通過函式轉換。例如:

mysql>

select inet_aton('

172.31.30.62');

+---------------------------+

| inet_aton('

172.31.30.62

') |+--

-------------------------+

|2887720510|+

---------------------------+

1 row in

set (0.00

sec)

mysql

>

select inet_ntoa(2887720510);+

-----------------------+

| inet_ntoa(2887720510) |+--

---------------------+

|172.31.30.62|+

-----------------------+

1 row in

set (0.00 sec)

2)時間型別可以採用datetime屬性,他比timestamp可用範圍大,儲存空間也從原來的8位元組降到了5位元組,因此可提高效能。

3)表字符集使用 utf8,必要時可申請使用 utf8mb4 字符集。

它的通用性比 gbk,latin1 都要好。utf8 字符集儲存漢字占用 3 個位元組,如果遇到表情儲存的要求,就可以使用 utf8mb4

4) select 查詢表的時候只需要獲取必要的字段,避免使用 select *。

這樣可以減少網路頻寬消耗,還有可能利用到覆蓋索引

5)所有字段定義中,預設都加上 not null 約束,避免出現 null。

在對該字段進行 select count() 統計計數時,可以讓統計結果更準確,因為值為 null 的資料,不會被計算進去的。

6)sql語句中,盡量避免出現 or 子句

這種判斷的子句可以讓程式自行完成,不要交給資料庫判斷。也要避免使用 union,盡量採用 union all,減少了去重和排序的工作。

Oracle 一條 sql 語句執行原理 面試題

1.思考 通常,執行一條 sql 語句,立馬能返回結果,但是,在 oracle 內部,是如何處理這條 sql 語句的呢?2.考點 1 主要流程 四大步驟 2 主要程序 伺服器程序 將 資料塊 從 資料檔案 讀取至 資料庫緩衝區快取 dbwn 後台程序則將 資料塊 從 資料庫緩衝區快取 寫入 資料檔案...

PHP面試題之優化

php效能問題 1.php語法使用的不恰當 2.使用php語言做了它不擅長的事 3.使用php語言鏈結的服務不給力 4.php自身做不了的事情 php的效能問題的解決方向 1.php語言級的效能優化 優化 2.php周邊問題的效能優化 linux,mysql,磁碟等 3.php語言效能的優化 c層 ...

PHP面試題之優化

php效能問題 1.php語法使用的不恰當 2.使用php語言做了它不擅長的事 3.使用php語言鏈結的服務不給力 4.php自身做不了的事情 php的效能問題的解決方向 1.php語言級的效能優化 優化 2.php周邊問題的效能優化 linux,mysql,磁碟等 3.php語言效能的優化 c層 ...