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

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),但是沒有達到理想速度。兩個表關(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ù)的話,就會導致慢。(我的理解:慢因為索引用不到了。索引的值是原始值,這個條件中用的卻是處理后的值。)

注意看這函數(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。符合預期

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

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

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

相關(guān)文章

  • 最新mysql-5.7.21安裝和配置方法

    最新mysql-5.7.21安裝和配置方法

    這篇文章主要介紹了最新mysql-5.7.21安裝和配置方法,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • MySQL數(shù)據(jù)庫算術(shù)運算舉例詳解

    MySQL數(shù)據(jù)庫算術(shù)運算舉例詳解

    這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫算術(shù)運算的相關(guān)資料,MySQL支持的算術(shù)運算符包括加、減、乘、除和模運算,它們是最常使用、最簡單的一類運算符,需要的朋友可以參考下
    2024-01-01
  • MySQL中時區(qū)參數(shù)time_zone解讀

    MySQL中時區(qū)參數(shù)time_zone解讀

    MySQL時區(qū)參數(shù)time_zone用于控制系統(tǒng)函數(shù)和字段的DEFAULT CURRENT_TIMESTAMP屬性,修改時區(qū)可能會影響timestamp類型的值,建議在MySQL配置文件中設(shè)置時區(qū)參數(shù),以確保高并發(fā)時的性能,在業(yè)務(wù)中盡量使用datetime類型來存儲時間,因為其時間上限比TIMESTAMP更遠
    2025-01-01
  • mysql按照自定義(指定順序)排序的方法實例

    mysql按照自定義(指定順序)排序的方法實例

    在我們寫業(yè)務(wù)代碼的時候,會經(jīng)常碰見排序方式既不是正序也不是倒序,下面這篇文章主要給大家介紹了關(guān)于mysql按照自定義(指定順序)排序的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • DDL數(shù)據(jù)庫與表的創(chuàng)建和管理深入講解使用教程

    DDL數(shù)據(jù)庫與表的創(chuàng)建和管理深入講解使用教程

    這篇文章主要介紹了DDL數(shù)據(jù)庫與表的創(chuàng)建和管理,系統(tǒng)架構(gòu)的層面來看,數(shù)據(jù)庫從大到小依次是數(shù)據(jù)庫服務(wù)器(上面安裝了DBMS和數(shù)據(jù)庫)、數(shù)據(jù)庫(也稱database或者schema)、數(shù)據(jù)表、數(shù)據(jù)表的行與列
    2023-04-04
  • mysql 查詢表中平均分最低的班級

    mysql 查詢表中平均分最低的班級

    查詢出dd(user_id,class_no,score)這個表中平均分最低的班級?
    2009-07-07
  • Mysql查詢列橫向轉(zhuǎn)換逗號拼接并加上雙引號

    Mysql查詢列橫向轉(zhuǎn)換逗號拼接并加上雙引號

    使用Mysql的GROUP_CONCAT函數(shù)和CONCAT函數(shù),將查詢結(jié)果的列橫向轉(zhuǎn)換為逗號拼接的字符串,并在每個值周圍加上雙引號,最終結(jié)果每一行包含一個user_id和一個由雙引號括起來的user_names字段,本文介紹Mysql查詢列橫向轉(zhuǎn)換逗號拼接并加上雙引號的知識,感興趣的朋友一起看看吧
    2025-02-02
  • Linux中更改轉(zhuǎn)移mysql數(shù)據(jù)庫目錄的步驟

    Linux中更改轉(zhuǎn)移mysql數(shù)據(jù)庫目錄的步驟

    前幾天發(fā)現(xiàn)由于MySQL的數(shù)據(jù)庫太大,默認安裝的/var盤已經(jīng)再也無法容納新增加的數(shù)據(jù),只能想辦法轉(zhuǎn)移數(shù)據(jù)的目錄。網(wǎng)上有很多相關(guān)的文章寫到轉(zhuǎn)移數(shù)據(jù)庫目錄的文章,但轉(zhuǎn)載的過程中還會有一些錯誤,因為大部分人根本就沒測試過,這篇文章是本文測試過整理好后分享給大家。
    2016-11-11
  • mysql允許遠程連接的方法

    mysql允許遠程連接的方法

    這篇文章主要介紹了mysql允許遠程連接的方法,內(nèi)容很詳細,感興趣的小伙伴們可以參考一下
    2015-12-12
  • MYSQL大量寫入問題優(yōu)化詳解

    MYSQL大量寫入問題優(yōu)化詳解

    這篇文章主要介紹了MYSQL大量寫入問題優(yōu)化詳解,文中優(yōu)化點解釋的很清楚,讓人看完就明了,感興趣的同學可以閱讀理解下
    2021-03-03

最新評論

赤壁市| 新竹县| 大丰市| 汕尾市| 金湖县| 富蕴县| 张家界市| 万源市| 襄城县| 司法| 商丘市| 朝阳区| 泊头市| 公安县| 普兰县| 吉林省| 泽州县| 固阳县| 赞皇县| 金溪县| 全椒县| 武鸣县| 邢台市| 祁连县| 临城县| 香格里拉县| 牟定县| 图片| 承德县| 仁布县| 关岭| 和林格尔县| 彝良县| 会昌县| 彩票| 拜城县| 志丹县| 南木林县| 皮山县| 都昌县| 镇巴县|