欧美vvv,亚洲第一成人在线,亚洲成人欧美日韩在线观看,日本猛少妇猛色XXXXX猛叫

新聞資訊

    # 問題描述

    本文對建立好的復合索引進行排序,并取記錄中非索引字段,發現索引不生效,例如,有如下表,DDL語句為:

    CREATE TABLE `employees` (
      `emp_no` int(11) NOT NULL,
      `birth_date` date NOT NULL,
      `first_name` varchar(14) NOT NULL,
      `last_name` varchar(16) NOT NULL,
      `gender` enum('M','F') NOT NULL,
      `hire_date` date NOT NULL,
      `age` int(11) NOT NULL,
      PRIMARY KEY (`emp_no`),
      KEY `unique_birth_name` (`first_name`,`last_name`) USING BTREE
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    復合索引為 (,) 。使用以下語句:

    rgb圖像與索引圖像的區別_通過索引查看圖像特定范圍_索引圖像與灰度圖像

    EXPLAIN SELECT
        gender
    FROM
        employees
    ORDER BY
        first_name,
        last_name

    根據上圖:type:all 及 Extra:Using 可惜,索引沒有生效。

    繼續進行試驗,對查詢語句進一步改寫通過索引查看圖像特定范圍,加上一個范圍查找:

    EXPLAIN SELECT
        gender
    FROM
    

    通過索引查看圖像特定范圍_rgb圖像與索引圖像的區別_索引圖像與灰度圖像

    employees WHERE first_name > 'Leah' ORDER BY first_name, last_name

    執行計劃顯示如下圖:

    這里發現結果和第一次sql分析無異。繼續試驗。

    改寫sql語句:

    EXPLAIN SELECT
        gender
    FROM
        employees
    

    通過索引查看圖像特定范圍_rgb圖像與索引圖像的區別_索引圖像與灰度圖像

    WHERE first_name > 'Tzvetan' ORDER BY first_name, last_name

    此時,令人驚訝的是通過索引查看圖像特定范圍,索引生效了。

    # 問題分析

    此時,我們做一個大膽的猜測:

    第一次進行sql分析時,因為第一次order by 后,得到的還是全表數據,如果根據復合索引中攜帶的主鍵查找每一個進行拼接,自然很費資源和時間,mysql不會做如此蠢的事。不如直接進行全表掃描,把掃描到的每條數據和order by得到的臨時數據進行拼接,從而得到需要的數據。

    為了驗證上述想法的正確性,我們對三次sql進行分析。

    第一次sql根據復合索引得到的數據量為:,為全表數據

    SELECT
        COUNT(first_name)
    FROM
    

    索引圖像與灰度圖像_rgb圖像與索引圖像的區別_通過索引查看圖像特定范圍

    employees ORDER BY first_name, last_name

    第二次改寫的sql根據復合索引得到的數據量為: , 為全表數據量的1/2。

    SELECT
        COUNT(first_name)
    FROM
        employees
    WHERE first_name > 'Leah'
    ORDER BY
        first_name,
        last_name

    rgb圖像與索引圖像的區別_通過索引查看圖像特定范圍_索引圖像與灰度圖像

    第三次改寫的sql根據復合索引得到的數據量為:36731, 為全表數據量的1/10。

    SELECT
        COUNT(first_name)
    FROM
        employees
    WHERE first_name > 'Tzvetan'
    ORDER BY
        first_name,
        last_name

    通過對比發現,第二次改寫的sql根據復合索引得到的數據量是全表數據量的1/2。此時還沒有達到mysql使用索引進行二次查找的量級。

    第三次改寫的sql根據復合索引得到的數據量是全表數據量的1/10,達到了mysql使用索引進行二次查找的量級,于是從執行計劃上可以看到,第三次改寫sql是走了索引的。

    # 總結

    mysql 是否根據首次索引條件查詢出的主鍵進行二次查找,也是要看查詢出來的數據量級,如果數據量接近全表數據量的話,就會進行全表掃描,否則根據第一次查詢出來的主鍵進行二次查詢。

    來源:////

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有