mysql按公升序建立索引 MySQL 降序索引

2021-10-13 14:34:01 字數 3755 閱讀 7911

mysql 降序索引

簡介:在本教程中,您將了解mysql降序索引以及如何利用它來提高查詢效能。

mysql降序索引簡介

降序索引是以降序儲存鍵值的索引。在mysql 8.0之前,您可以desc在索引定義中指定。但是,mysql忽略了它。與此同時,mysql可以以相反的順序掃瞄索引,但成本很高。

以下語句建立乙個帶索引的新錶:

create table t(

a int not null,

b int not null,

index a_asc_b_desc (a asc, b desc)

當您使用show create table在mysql 5.7,你會發現,desc如下圖所示被忽略:

mysql> show create table t\g;

*************************** 1. row ***************************

table: t

create table: create table `t` (

`a` int(11) not null,

`b` int(11) not null,

key `a_asc_b_desc` (`a`,`b`)

) engine=innodb default charset=latin1

1 row in set (0.00 sec)

從mysql 8.0開始,如果desc在索引定義中使用關鍵字,則鍵值將按降序儲存。在查詢中請求降序時,查詢優化器可以利用降序索引。

以下顯示了mysql 8.0中的表結構:

mysql> show create table t\g;

*************************** 1. row ***************************

table: t

create table: create table `t` (

`a` int(11) not null,

`b` int(11) not null,

key `a_asc_b_desc` (`a`,`b` desc)

) engine=innodb default charset=utf8mb4 collate=utf8mb4_0900_ai_ci

1 row in set (0.00 sec)

mysql降序索引示例

首先,使用不同順序的四個索引重新建立表t:

drop table t;

create table t (

a int,

b int,

index a_asc_b_asc (a asc , b asc),

index a_asc_b_desc (a asc , b desc),

index a_desc_b_asc (a desc , b asc),

index a_desc_b_desc (a desc , b desc)

其次,使用下面的儲存過程來插入行到t表:

delimiter $$

create procedure insertsampledata(

in rowcount int,

in low int,

in high int

begin

declare counter int default 0;

repeat

set counter := counter + 1;

-- insert data

insert into t(a,b)

values(

round((rand() * (high-low))+high),

round((rand() * (high-low))+high)

until counter >= rowcount

end repeat;

end$$

delimiter ;

儲存的過程中插入的行數(rowcount)與之間的值low和high到a和b所述列t表。

讓我們10,000在t表中插入行,其中隨機值介於1和1000之間:

call insertsampledata(10000,1,1000);

第三,從t表中查詢具有不同排序順序的資料:

按公升序排列a和b列中的值:

explain select

from

torder by a , b; -- use index a_asc_b_asc

這是輸出:

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | extra |

| 1 | ****** | t | null | index | null | a_asc_b_asc | 10 | null | 10192 | 100.00 | using index |

1 row in set, 1 warning (0.03 sec)

按公升序對a列中的值進行排序,按降序對列 b 中的值進行排序:

explain select

from

torder by a , b desc; -- use index a_asc_b_desc

輸出是:

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | extra |

| 1 | ****** | t | null | index | null | a_asc_b_desc | 10 | null | 10192 | 100.00 | using index |

1 row in set, 1 warning (0.01 sec)

按降序對a列中的值進行排序,按公升序對列 b 中的值進行排序:

explain select

from

torder by a desc , b; -- use index a_desc_b_asc

以下說明輸出:

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | extra |

| 1 | ****** | t | null | index | null | a_desc_b_asc | 10 | null | 10192 | 100.00 | using index |

1 row in set, 1 warning (0.42 sec)

按列a和b降序對值進行排序:

explain select

from

torder by a desc , b desc; -- use index a_desc_b_desc

以下顯示輸出:

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | extra |

| 1 | ****** | t | null | index | null | a_desc_b_desc | 10 | null | 10192 | 100.00 | using index |

1 row in set, 1 warning (0.01 sec)

在本教程中,您學習了如何使用mysql降序索引來提高查詢效能。

mysql索引框架 MySQL架構和MySQL索引

1.mysql架構 1.1邏輯架構圖 1.1.1connection pool 連線池 管理緩衝使用者連線,執行緒處理等需要快取的需求。負責監聽對mysql server的各種請求,接收連線請求,所有連線請求到執行緒管理模組。每乙個連線上mysql server的客戶端請求都會被分配 或建立 乙個連...

(索引)建立MySQL索引

建立索引的必要性 主鍵預設是建立索引的,而且具有唯一性 合適地建立索引後比不建立索引,提高了查詢速度 建立索引的語法 簡單索引 可以有重複資料 create index indexname on tablename column name 1舉例子說明如 建立乙個資料表,設定一些初始的資料,然後採用...

mysql表檔案建立 php檔案建立mysql的表

乙個php檔案,裡面內容是建表語句,如下,怎麼操作這個php檔案才能在mysql中建表啊?createtableifnotexists category id.乙個php檔案,裡面內容是建表語句,如下,怎麼操作這個php檔案才能在mysql中建表啊?create table if not exist...