欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談MySQL之select優(yōu)化方案

 更新時間:2021年08月06日 09:42:34   作者:xiaoff  
我們是否看到過在公司中許多查詢語句都是select * xxxx,本文就主要介紹了MySQL之select優(yōu)化方案,具有一定的參考價值,感興趣的可以了解一下

生活中的例子

我們是否看到過在公司中許多查詢語句都是select * xxxx

心中的想法肯定是,別人寫了select *,那我寫吧,省去了不少麻煩事兒

慢查詢

  • 首先去思考,最基本的,是否我們使用的數據庫插查詢語句存在了訪問的數據太多
  • 其實大部分性能低的查詢往往都可以通過減少訪問的數據量來優(yōu)化的
  • 因為select * 會給服務器帶來額外的I/O、內存和cpu的消耗

數據庫中慢查詢開銷的三個指標

  • 相應時間
  • 掃描的行數
  • 返回的行數

如果走了索引

select * from stu where id = 1;

索引會優(yōu)化查詢,只返回十條數據
如果沒有id索引,那么就會預估訪問上百上千行數據

tips: 通過mysql中的EXPLAIN命令去查看的其中rows對應的行數

其實最好的情況就是在存儲引擎層過where濾掉不匹配的記錄
其次好的情況是覆蓋索引命中掃描,在服務器層where濾掉不匹配的記錄,不需要回表查詢
最的情況是從數據表返回數據,然后再過濾不滿足條件的記錄

如何去優(yōu)化

使用索引覆蓋,把我們需要的列都放在索引中,這樣我們就避免了回表去查詢
可以單獨分出來表

3.重構查詢(可以進行大的查詢化解成小的查詢)

舉例: 如count、limit、max()

count

count 最好的優(yōu)化就是增加匯總表,因為count不可避免需要掃描大量的行

limit

limit我們在做分頁的時候很常用,如下面代碼

select id from stu order by id limit 1000,20;

這條語句會查詢1020條數據然后丟掉前一千條返回1000~1020的二十條數據
那么優(yōu)化的最好的方式就是走索引,這樣limit查詢查就能變成已知位置的查詢

最大值最小值min&max

首先我們試想如果走的是主鍵索引,那么我們去查詢的時候第一個的值就是我們要返回的最小值
我們也可以走主鍵索引以后,用limit去控制數據量,這樣就實現了min()函數的效果,從而替換掉min

select id 
from stu 
use index(primay) where address = 'bj' limit 1;

這樣就盡可能掃描了少的記錄數

最后我們來做兩道題放松一下吧

找出`Employee` 表中第二高的薪水(Salary)
+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+
結果
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+
解答

select max(Salary)  SecondHighestSalary
from Employee 
where  salary < (select max(salary)
from Employee)
查找 `Person` 表中所有重復的電子郵箱。
+----+---------+
| Id | Email   |
+----+---------+
| 1  | a@b.com |
| 2  | c@d.com |
| 3  | a@b.com |
+----+---------+

結果

+---------+
| Email   |
+---------+
| a@b.com |
+---------+

解答
select Email from Person 
group by Email 
having count(Email) >= 2;

到此這篇關于淺談MySQL之select優(yōu)化方案的文章就介紹到這了,更多相關MySQL select優(yōu)化內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MYSQL統計逗號分隔字段元素的個數

    MYSQL統計逗號分隔字段元素的個數

    本文主要介紹了MYSQL統計逗號分隔字段元素的個數,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • MySQL表的操作之創(chuàng)建查看刪除和修改

    MySQL表的操作之創(chuàng)建查看刪除和修改

    這篇文章主要給大家介紹了關于MySQL表的操作之創(chuàng)建查看刪除和修改的相關資料,MySQL是最常用的數據庫,在數據庫操作中基本都是增刪改查操作,簡稱CRUD,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • MySQL 的 21 個規(guī)范、優(yōu)化最佳實踐!

    MySQL 的 21 個規(guī)范、優(yōu)化最佳實踐!

    每一個好習慣都是一筆財富,本文分 SQL 后悔藥,SQL 性能優(yōu)化,SQL 規(guī)范優(yōu)雅三個方向,分享寫 SQL 的 21 個好習慣和最佳實踐
    2020-12-12
  • 在MySQL中同時查找兩張表中的數據的示例

    在MySQL中同時查找兩張表中的數據的示例

    這篇文章主要介紹了在MySQL中同時查找兩張表中的數據的示例,即一次查詢操作返回兩張表的結果,需要的朋友可以參考下
    2015-07-07
  • MySQL數據庫手冊DATABASE操作與編碼(小白入門篇)

    MySQL數據庫手冊DATABASE操作與編碼(小白入門篇)

    這篇文章主要介紹了MySQL數據庫手冊DATABASE操作與編碼的小白入門篇,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • MySQL刪除了記錄不生效的原因排查

    MySQL刪除了記錄不生效的原因排查

    這篇文章主要介紹了MySQL刪除了記錄不生效的原因排查,幫助大家解決MySQL刪除語句不生效的問題,感興趣的朋友可以了解下
    2020-11-11
  • Mysql升級到5.7后遇到的group by查詢問題解決

    Mysql升級到5.7后遇到的group by查詢問題解決

    這篇文章主要給大家介紹了關于Mysql升級到5.7后遇到的group by查詢問題的解決方法,文中通過示例代碼介紹的非常詳細,對同樣遇到這個問題的朋友們具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-09-09
  • Mysql8公用表表達式CTE詳解

    Mysql8公用表表達式CTE詳解

    這篇文章主要介紹了Mysql8公用表表達式CTE詳解,公用表表達式(或通用表表達式)簡稱為CTE,CTE可以理解成一個可以復用的子查詢,當然跟子查詢還是有點區(qū)別的,CTE可以引用其他CTE,但子查詢不能引用其他子查詢,需要的朋友可以參考下
    2023-08-08
  • MySQL5.7限制general_log日志大小的實現

    MySQL5.7限制general_log日志大小的實現

    MySQL5.7.41中為避免通用查詢日志general_log快速增長占用硬盤空間,可以通過定時任務執(zhí)行腳本進行每日備份或清理,從而限制其大小,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-10-10
  • 教你一招永久解決mysql插入中文失敗問題

    教你一招永久解決mysql插入中文失敗問題

    mysql經常會遇到某些中文插入異常,最近有同學反饋了這樣一個問題,所以下面這篇文章主要給大家介紹了關于如何永久解決mysql插入中文失敗問題的相關資料,需要的朋友可以參考下
    2021-11-11

最新評論