日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL面试题之如何优化一条有问题的SQL语句?

發布時間:2024/8/22 数据库 39 如意码农
生活随笔 收集整理的這篇文章主要介紹了 MySQL面试题之如何优化一条有问题的SQL语句? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

  1. 回歸到表的設計層面,數據類型選擇是否合理

  2. 大表碎片的整理是否完善

  3. 表的統計信息,是不是準確的

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

  5. 針對索引的選擇性,建立合適的索引(就又涉及到大表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,減少了去重和排序的工作。

總結

以上是生活随笔為你收集整理的MySQL面试题之如何优化一条有问题的SQL语句?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。