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

MySql Sql 優(yōu)化技巧分享

 更新時間:2017年02月24日 11:10:26   作者:shamork  
這篇文章主要介紹了MySql Sql 優(yōu)化技巧分享,非常不錯,具有參考借鑒價值,需要的朋友可以參考下

有天發(fā)現(xiàn)一個帶inner join的sql 執(zhí)行速度雖然不是很慢(0.1-0.2),但是沒有達(dá)到理想速度。兩個表關(guān)聯(lián),且關(guān)聯(lián)的字段都是主鍵,查詢的字段是唯一索引。

sql如下:

SELECT
p_item_token.*,
p_item.product_type
FROM
p_item_token
INNER JOIN p_item ON p_item.itemid = p_item_token.itemid
WHERE
p_item_token.token ='db87a780427d4d02ba2bd49fac8xxx';

其中表  p_item_token  中  itemid 是主鍵, token 是唯一索引。 p_item 中itemid 是主鍵

按照理想速度,應(yīng)該在0.03s左右正常。但實際為0.2左右,慢了不少。

直接 EXPLAIN 看計劃

EXPLAIN
SELECT
  p_item_token.*,
  p_item.product_type
FROM
  p_item_token
INNER JOIN p_item ON p_item.itemid = p_item_token.itemid
WHERE
  p_item_token.token = 'db87a780427d4d02ba2bd49fac8xxx';

結(jié)果:

注意看上面大紅框。p_item表中就是2w條數(shù)據(jù),那這個就是全表掃描了。

不正常啊。

加個show warnings 看看。注意:有些情況下SHOW WARNINGS 會沒有結(jié)果。我還不知道原因。建議用本地測試數(shù)據(jù)庫運行。

EXPLAIN
SELECT
  p_item_token.*,
  p_item.product_type
FROM
  p_item_token
INNER JOIN p_item ON p_item.itemid = p_item_token.itemid
WHERE
  p_item_token.token = 'db87a780427d4d02ba2bd49fac8xxx';
SHOW WARNINGS;

結(jié)果2里面顯示code=1003.后面有個sql語句。這個語句就是mysql把我們輸入的sql語句,按照規(guī)則改寫之后執(zhí)行的最終語句。

/* select#1 */
SELECT
  '0000eb612d78407a91a9b3854ffffffff' AS `itemid`,    /*注:直接按主鍵把值查出來了*/
  'db87a780427d4d02ba2bd49fac8cf98b' AS `token`,    
  '2016-12-16 10:46:53' AS `create_time`,        
  '' AS `ftoken`,                    
  `p_db`.`p_item`.`product_type` AS `product_type`  
FROM
  `p_db`.`p_item_token`
JOIN `p_db`.`p_item`
WHERE
  (
    (
      CONVERT (
        `p_db`.`p_item`.`itemid` USING utf8mb4
      ) = '0000eb612d78407a91a9b3854fffffff'
    )
  )

奇怪啊。Where中怎么有個 CONVERT  ?我們知道,如果where條件中,等式的左邊,也就是要查詢的字段上有函數(shù)的話,就會導(dǎo)致慢。(我的理解:慢因為索引用不到了。索引的值是原始值,這個條件中用的卻是處理后的值。)

注意看這函數(shù),意思是把 itemid 這一列的編碼轉(zhuǎn)換成 utf8mb4 .也就是說,這一列的編碼不是 utf8mb4 !

打開表,把兩個表中itemid這一列的編碼都改成utf8。再次運行解釋。

從解釋結(jié)果來看已經(jīng)沒有問題了。

再看下結(jié)果2中的語句:

/* select#1 */
SELECT
  '0000eb612d78407a91a9b3854fffffff' AS `itemid`,
  'db87a780427d4d02ba2bd49fac8cf98b' AS `token`,
  '2016-12-16 10:46:53' AS `create_time`,
  '' AS `ftoken`,
  'cxx' AS `product_type`
FROM
  `toy_item_plat`.`p_item_token`
JOIN `toy_item_plat`.`p_item`
WHERE
  1

這 select 中全是常量了。速度能不快嗎?

執(zhí)行結(jié)果0.036s。符合預(yù)期

經(jīng)驗總結(jié):

explain 可以查看執(zhí)行計劃是否符合預(yù)期,如果有出現(xiàn)rows較大的情況,則說明出現(xiàn)了全表掃描,將來會是性能瓶頸

show warning的結(jié)果,則能看到優(yōu)化器處理后的語句。如果與原始語句有出入,仔細(xì)對比研究能夠發(fā)現(xiàn)實際問題。

相關(guān)文章

  • 關(guān)于數(shù)據(jù)庫中的查詢優(yōu)化

    關(guān)于數(shù)據(jù)庫中的查詢優(yōu)化

    這篇文章主要介紹了關(guān)于數(shù)據(jù)庫中的查詢優(yōu)化,對于大型的應(yīng)用系統(tǒng),數(shù)據(jù)動輒上百萬,就需要了解DBMS對查詢語句的處理過程和優(yōu)化算法,更好的利用其優(yōu)化算法,以提高系統(tǒng)的性能,需要的朋友可以參考下
    2023-07-07
  • MyEclipse連接MySQL數(shù)據(jù)庫圖文教程

    MyEclipse連接MySQL數(shù)據(jù)庫圖文教程

    這篇文章主要為大家詳細(xì)介紹了MyEclipse連接MySQL數(shù)據(jù)庫圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 在同一Linux下安裝兩個版本的MySQL的流程步驟

    在同一Linux下安裝兩個版本的MySQL的流程步驟

    打工人奉旨制作數(shù)據(jù)庫服務(wù)的虛擬機模板,模板中包含各種數(shù)據(jù)庫,其中mysql需要具備5.7及8.0兩個版本,并保證服務(wù)能正常同時使用,所以本文給小編介紹了在同一Linux下安裝兩個版本的MySQL的流程步驟,需要的朋友可以參考下
    2024-03-03
  • MySQL實現(xiàn)查詢數(shù)據(jù)庫表記錄數(shù)

    MySQL實現(xiàn)查詢數(shù)據(jù)庫表記錄數(shù)

    這篇文章主要介紹了MySQL實現(xiàn)查詢數(shù)據(jù)庫表記錄數(shù),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • 詳解mysql中的字符集和校驗規(guī)則

    詳解mysql中的字符集和校驗規(guī)則

    這篇文章主要介紹了mysql中的字符集和校驗規(guī)則的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)MySQL,感興趣的朋友可以了解下
    2020-12-12
  • 一文理解MySQL數(shù)據(jù)庫的約束與表的設(shè)計

    一文理解MySQL數(shù)據(jù)庫的約束與表的設(shè)計

    約束是用來限制表中的數(shù)據(jù)長什么樣子的,即什么樣的數(shù)據(jù)可以插入到表中,什么樣的數(shù)據(jù)插入不到表中,下面這篇文章主要給大家介紹了關(guān)于如何通過一文理解MySQL數(shù)據(jù)庫的約束與表的設(shè)計的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • linux下mysql忘記密碼的解決方法

    linux下mysql忘記密碼的解決方法

    這篇文章主要為大家詳細(xì)介紹了linux下mysql忘記密碼的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 為什么MySQL分頁用limit會越來越慢

    為什么MySQL分頁用limit會越來越慢

    在mysql中l(wèi)imit可以實現(xiàn)快速分頁,但是如果數(shù)據(jù)到了幾百萬時我們的limit必須優(yōu)化才能有效的合理的實現(xiàn)分頁了,否則可能卡死你的服務(wù)器
    2021-07-07
  • 一文詳解MySQL?text能存多少個字符

    一文詳解MySQL?text能存多少個字符

    在我們使用mysql的時候,對字段的選用以及具體使用什么類型會很有疑問,下面這篇文章主要給大家介紹了關(guān)于MySQL?text能存多少個字符的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 關(guān)于k8s環(huán)境部署mysql主從的問題

    關(guān)于k8s環(huán)境部署mysql主從的問題

    這篇文章主要介紹了k8s環(huán)境部署mysql主從的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03

最新評論