亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言

技術(shù)能解決的事情改技術(shù)

技術(shù)解決不了的事情該需求

現(xiàn)狀

假設(shè)我們目前有兩張表

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

其兩張表的數(shù)據(jù)邏輯如下

t_a_book

t_r_book_history

t_a_user

當(dāng)然了,我們假設(shè)當(dāng)前的數(shù)據(jù)量并不只是我們眼前看到的這幾條數(shù)據(jù),而是線上真實情況。

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

問題一

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

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

這時候我們?nèi)绾卧O(shè)計查詢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;

查詢出來的結(jié)果為

其邏輯為

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

單表查詢

如果此時我們選擇化繁為簡,使用單表的查詢方法,來查詢數(shù)據(jù)其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 ();

其數(shù)據(jù)邏輯與多表聯(lián)查一致,唯一不同的便是需要查詢?nèi)?/p>

結(jié)論

我們可以看,當(dāng)前兩種查詢方式的邏輯來看。

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

當(dāng)數(shù)據(jù)量大的時候,我們只需要根據(jù)release_time 做索引,簡化這一步的操作。

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

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

問題二

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

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

如果這時候,我們?nèi)绾尉帉慡QL

多表聯(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;

顯示的數(shù)據(jù)

其邏輯為

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

單表查詢

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)幾十萬個符合的結(jié)果

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

如何解決

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

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

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

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

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

id,數(shù)據(jù)主鍵,手機號碼

我們?nèi)绾未_定一本書呢?我們可以用一個ISBN

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

但是,有人說,我們是技術(shù)。不能對產(chǎn)品提這樣的想法,

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

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

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

相關(guān)文章

  • MySQL中按月統(tǒng)計并逐月累加統(tǒng)計值的幾種實現(xiàn)寫法

    MySQL中按月統(tǒng)計并逐月累加統(tǒng)計值的幾種實現(xiàn)寫法

    有時候,我們可能有這樣的場景,需要將銷量按月統(tǒng)計,并且按月逐月累加,本文就來介紹一下MySQL中按月統(tǒng)計并逐月累加統(tǒng)計值的幾種實現(xiàn)寫法,感興趣的可以了解一下
    2023-10-10
  • MySQL多表聯(lián)合查詢、連接查詢、子查詢的實現(xiàn)

    MySQL多表聯(lián)合查詢、連接查詢、子查詢的實現(xiàn)

    本文主要介紹了MySQL多表聯(lián)合查詢、連接查詢、子查詢的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • MySQL復(fù)制表結(jié)構(gòu)和內(nèi)容到另一張表中的SQL語句

    MySQL復(fù)制表結(jié)構(gòu)和內(nèi)容到另一張表中的SQL語句

    這篇文章主要介紹了MySQL復(fù)制表結(jié)構(gòu)和內(nèi)容到另一張表中的SQL語句,需要的朋友可以參考下
    2014-07-07
  • MySQL數(shù)據(jù)庫復(fù)合查詢操作實戰(zhàn)

    MySQL數(shù)據(jù)庫復(fù)合查詢操作實戰(zhàn)

    mysql表的查詢都是對一張表進行查詢,在實際開發(fā)中這遠(yuǎn)遠(yuǎn)不夠,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫復(fù)合查詢的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • mysql 5.7.13 winx64安裝配置方法圖文教程(win10)

    mysql 5.7.13 winx64安裝配置方法圖文教程(win10)

    這篇文章主要為大家分享了mysql 5.7.13 winx64安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • SQL刪除重復(fù)數(shù)據(jù)的實例教程

    SQL刪除重復(fù)數(shù)據(jù)的實例教程

    在使用SQL提數(shù)的時候,常會遇到表內(nèi)有重復(fù)值的時候,下面這篇文章主要給大家介紹了關(guān)于SQL刪除重復(fù)數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • 如何清除mysql注冊表

    如何清除mysql注冊表

    在本篇文章里小編給大家整理的是關(guān)于如何清除mysql注冊表的相關(guān)知識點內(nèi)容,有需要的朋友們可以參考下。
    2020-08-08
  • 詳解MySQL批量入庫的幾種方式

    詳解MySQL批量入庫的幾種方式

    本文主要介紹了詳解MySQL批量入庫的幾種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • MySQL kill指令使用指南

    MySQL kill指令使用指南

    這篇文章主要介紹了MySQL kill指令的使用方法,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2020-12-12
  • 淺談mysqldump使用方法(MySQL數(shù)據(jù)庫的備份與恢復(fù))

    淺談mysqldump使用方法(MySQL數(shù)據(jù)庫的備份與恢復(fù))

    下面小編就為大家?guī)硪黄獪\談mysqldump使用方法(MySQL數(shù)據(jù)庫的備份與恢復(fù))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01

最新評論