国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL中索引優化distinct語句及distinct的多字段操作

2024-07-24 12:45:10
字體:
來源:轉載
供稿:網友

MySQL通常使用GROUPBY(本質上是排序動作)完成DISTINCT操作,如果DISTINCT操作和ORDERBY操作組合使用,通常會用到臨時表.這樣會影響性能. 在一些情況下,MySQL可以使用索引優化DISTINCT操作,但需要活學活用.本文涉及一個不能利用索引完成DISTINCT操作的實例.

 

實例1 使用索引優化DISTINCT操作

create table m11 (a int, b int, c int, d int, primary key(a)) engine=INNODB;insert into m11 values (1,1,1,1),(2,2,2,2),(3,3,3,3),(4,4,4,4),(5,5,5,5),(6,6,6,6),(7,7,7,7),(8,8,8,8);explain select distinct(a) from m11;
mysql> explain select distinct(a) from m11;

復制代碼 代碼如下:

+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-------------+| 1 | SIMPLE | m11 | NULL | index | PRIMARY | PRIMARY | 4 | NULL | 1 | 100.00 | Using index |+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-------------+


說明:
1 'a'列上存在主鍵索引,MySQL可以利用索引(key列值表明使用了主鍵索引)完成了DISTINCT操作.

2 這是使用索引優化DISTINCT操作的典型實例.

 

實例2 使用索引不能優化DISTINCT操作

create table m31 (a int, b int, c int, d int, primary key(a)) engine=MEMORY;insert into m31 values (1,1,1,1),(2,2,2,2),(3,3,3,3),(4,4,4,4),(5,5,5,5),(6,6,6,6),(7,7,7,7),(8,8,8,8);explain select distinct(a) from m31;
mysql> explain select distinct(a) from m31;

復制代碼 代碼如下:

+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+| 1 | SIMPLE | m31 | NULL | ALL | NULL | NULL | NULL | NULL | 8 | 100.00 | NULL |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+



說明:
1 從查詢執行計劃看,索引沒有被使用.

2 對比實例1的建表語句,只是存儲引擎不同.

3 為什么主鍵索引沒有起作用? 難道MEMORY存儲引擎上的索引不可使用?

 

實例3 使用索引可以優化DISTINCT操作的Memory表

create table m33 (a int, b int, c int, d int, INDEX USING BTREE (a)) engine=MEMORY;insert into m33 values (1,1,1,1),(2,2,2,2),(3,3,3,3),(4,4,4,4),(5,5,5,5),(6,6,6,6),(7,7,7,7),(8,8,8,8);explain select distinct(a) from m33;
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广丰县| 探索| 建湖县| 岑巩县| 平乐县| 大姚县| 石首市| 封丘县| 卫辉市| 黄冈市| 青川县| 沧州市| 肇州县| 屏边| 高雄县| 天津市| 潢川县| 景宁| 邻水| 二连浩特市| 岳阳县| 威信县| 建始县| 临澧县| 建宁县| 伊宁市| 绍兴市| 武鸣县| 商丘市| 安阳县| 安化县| 政和县| 玉屏| 阿克陶县| 石门县| 米林县| 定兴县| 闸北区| 全椒县| 洪雅县| 普安县|