最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL詳解如何優(yōu)化查詢條件

 更新時間:2022年05月21日 08:43:54   作者:會噴火才能叫火山  
我們知道從MySQL表中使用SELECT語句來查詢數據,如需有條件地從表中選取數據,可將WHERE子句添加到SELECT語句中,本篇我們來看看怎樣優(yōu)化查詢條件

前言

技術能解決的事情改技術

技術解決不了的事情該需求

現(xiàn)狀

假設我們目前有兩張表

業(yè)務表 書( t_a_book ) 閱讀歷史記錄表 (t_r_book_history) 用戶表

其兩張表的數據邏輯如下

t_a_book

t_r_book_history

t_a_user

當然了,我們假設當前的數據量并不只是我們眼前看到的這幾條數據,而是線上真實情況。

每張表至少都是10w+起步

問題一

這時候,我們需要面臨第一個業(yè)務問題,

我們需要做一個報表,顯示用戶閱讀圖書的記錄,并顯示用戶名,用戶號,書名

這時候我們如何設計查詢SQL

多表聯(lián)查

SELECT * FROM t_r_book_history bh 
	LEFT JOIN t_a_user u ON bh.user_id = u.id 
	LEFT JOIN t_a_book b ON bh.book_id = b.id 
WHERE 
	bh.record_flag = 1 
ORDER BY bh.release_time DESC LIMIT 10;

查詢出來的結果為

其邏輯為

  • 數據庫根據release_time倒序查詢數據表,取出倒序的數據
  • 根據左連接獲取 用戶信息
  • 根據左連接獲取 圖書信息

單表查詢

如果此時我們選擇化繁為簡,使用單表的查詢方法,來查詢數據其SQL為

SELECT * FROM t_r_book_history bh 
WHERE 
	bh.record_flag = 1 
ORDER BY bh.release_time DESC LIMIT 10;
// 用戶信息
SELECT * FROM t_a_user u WHERE u.id IN ();
// 圖書信息
SELECT * FROM t_a_books b WHERE u.id IN ();

其數據邏輯與多表聯(lián)查一致,唯一不同的便是需要查詢三次

結論

我們可以看,當前兩種查詢方式的邏輯來看。

主要會存在的流量壓力在與 t_r_book_history 這張表上面

當數據量大的時候,我們只需要根據release_time 做索引,簡化這一步的操作。

后續(xù)都可以使用主鍵來簡化操作

由此來看,兩個語句其實在本質上沒有明顯的快慢之分

問題二

現(xiàn)在我們需要增加兩個查詢條件

  • 用戶名稱,支持模糊查詢
  • 書名信息,支持模糊查詢

如果這時候,我們如何編寫SQL

多表聯(lián)查

如果我們使用多表聯(lián)查的思路來填寫SQL

SELECT * FROM t_r_book_history bh 
	LEFT JOIN t_a_user u ON bh.user_id = u.id 
	LEFT JOIN t_a_book b ON bh.book_id = b.id 
WHERE 
	bh.record_flag = 1 
	AND 
	b.name like "四%"
	and u.name like "張%"
ORDER BY bh.release_time DESC LIMIT 10;

顯示的數據

其邏輯為

  • 查詢用戶表,根據其用戶名稱進行模糊查詢
  • 查詢書表,根據書名進行模糊查詢
  • 根據用戶主鍵,書籍主鍵作為查詢條件來進行查詢

單表查詢

SELECT * FROM t_a_user WHERE user_name LIKE "張%"
SELECT * FROM t_a_book WHERE user_name LIKE "四%"
SELECT * FROM t_r_book_history bh 
WHERE 
	bh.record_flag = 1 
ORDER BY bh.release_time DESC LIMIT 10;
// 用戶信息
SELECT * FROM t_a_user u WHERE u.id IN ();
// 圖書信息
SELECT * FROM t_a_books b WHERE u.id IN ();

其查詢邏輯與多表聯(lián)查一致

問題

現(xiàn)在主要的問題在于 , t_a_user , t_a_book , t_r_book_history 這三張表都是大表,

我們使用的查詢條件也十分的模糊

簡單的說 , 無論我們使用哪種方法, 都有可能會出現(xiàn)幾十萬個符合的結果

因此,我們無論使用哪種編寫方法 , 這個SQL都是不可行的

如何解決

文章寫到這里,我們會發(fā)現(xiàn)這個問題,已經不能停留再技術成面的問題。

因此,我們就只能修改需求

我們這里的問題 , 是這兩張表的查詢條件。他十分的模糊,我們無法將范圍限制在幾條,幾十條,甚至幾百條內。

既然這樣,我們就只能跟需求方表示,這個查詢條件必須使用十分“明確”的數據

例如對于用戶,我們常常能用什么來明確指向一個用戶呢?

id,數據主鍵,手機號碼

我們如何確定一本書呢?我們可以用一個ISBN

修改這兩個查詢條件,才能將這個不能解決的問題,修改為解決

但是,有人說,我們是技術。不能對產品提這樣的想法,

但是我想說,你是打算在將來來查詢卡半分鐘的時候說,說服所有人這個東西不關我的事

還是說,在未開發(fā)前說服產品

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

相關文章

  • com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的區(qū)別

    com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver&n

    大家在連接mysql的時候,啟動項目,會警告你推薦使用com.mysql.cj.jdbc.Driver?而不是com.mysql.jdbc.Driver,本文主要介紹了com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Oracle與MySQL的區(qū)別及優(yōu)缺點

    Oracle與MySQL的區(qū)別及優(yōu)缺點

    這篇文章主要介紹了Oracle與MySQL的區(qū)別及優(yōu)缺點,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參加一下
    2022-08-08
  • 淺談mysql雙層not exists查詢執(zhí)行流程

    淺談mysql雙層not exists查詢執(zhí)行流程

    本文主要介紹了淺談mysql雙層not?exists查詢執(zhí)行流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • MySQL主鍵批量修改的坑與解決方案

    MySQL主鍵批量修改的坑與解決方案

    在日常開發(fā)中,我們可能會遇到需要批量修改 MySQL 數據表主鍵的情況,乍一看,修改主鍵 ID 似乎是一個簡單的操作,但如果處理不當,會導致操作失敗甚至數據丟失,本文將詳細剖析問題成因,并總結多種安全高效的解決方案,需要的朋友可以參考下
    2024-12-12
  • 完美解決mysql in條件語句只讀取一條信息問題的2種方案

    完美解決mysql in條件語句只讀取一條信息問題的2種方案

    使用mysql多表查詢時一個表中的某個字段作為另一表的in查詢條件,只能讀取一條信息,而直接用數字的話可以正常讀取
    2018-04-04
  • MySQL密碼策略管理插件validate_password用法詳解

    MySQL密碼策略管理插件validate_password用法詳解

    自MySQL5.6起,引入validate_password插件,用于密碼長度和強度管理,在MySQL8.0中,該插件通過服務器組件重新實現(xiàn),插件默認不允許密碼為用戶名,可設定最小長度和強度等級,還可要求密碼包含數字、大小寫字母和特殊字符
    2024-11-11
  • 與MSSQL對比學習MYSQL的心得(五)--運算符

    與MSSQL對比學習MYSQL的心得(五)--運算符

    MYSQL中的運算符很多,這一節(jié)主要講MYSQL中有的,而SQLSERVER沒有的運算符
    2014-06-06
  • MySQL中處理各種重復的一些方法

    MySQL中處理各種重復的一些方法

    這篇文章主要介紹了MySQL中處理各種重復的一些方法,包括對表和查詢結果的重復的一些處理,需要的朋友可以參考下
    2015-05-05
  • MySQL日志系統(tǒng)詳細資料分享

    MySQL日志系統(tǒng)詳細資料分享

    本文給大家匯總介紹了一下MySQL中的日志系統(tǒng)的詳細資料,非常的細致,有需要的小伙伴可以參考下
    2017-02-02
  • mysql主從同步原理及應用場景示例詳解

    mysql主從同步原理及應用場景示例詳解

    這篇文章主要為大家介紹了mysql主從同步原理及應用場景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08

最新評論

阿尔山市| 绥宁县| 同心县| 新建县| 嘉黎县| 泽普县| 新疆| 陕西省| 新巴尔虎左旗| 林芝县| 瑞金市| 库尔勒市| 文水县| 工布江达县| 汝阳县| 兰坪| 沂水县| 永和县| 三亚市| 蒲城县| 临海市| 红安县| 古蔺县| 秀山| 西乌珠穆沁旗| 晋中市| 衢州市| 五莲县| 崇左市| 碌曲县| 嵊泗县| 长治市| 顺义区| 刚察县| 宜宾县| 佛山市| 黑河市| 佳木斯市| 南皮县| 柳河县| 新营市|