mysql 添加索引卡死_mysql添加索引,查询反而变慢
依照楼主的数据,我也造了400万数据:
mysql> select * from index_test limit 5;
id1
id2
11111
11111
22222
22222
11111
11111
22222
22222
11111
11111
id1创建索引
执行确实是id2谓词条件比较快:
mysql> select * from index_test where id1=11111;
2097152 rows in set (3.00 sec)
mysql> select * from index_test where id2=11111;
2097152 rows in set (2.32 sec)
id1的profile是这样的:
+----------------------+----------+
| Status | Duration |
+----------------------+----------+
| starting | 0.000080 |
| checking permissions | 0.000014 |
| Opening tables | 0.000024 |
| init | 0.000033 |
| System lock | 0.000015 |
| optimizing | 0.000018 |
| statistics | 0.035408 |
| preparing | 0.000033 |
| executing | 0.000007 |
| Sending data | 2.963681 |
| end | 0.000021 |
| query end | 0.000015 |
| closing tables | 0.000020 |
| freeing items | 0.003474 |
| logging slow query | 0.000117 |
| cleaning up | 0.000072 |
+----------------------+----------+
id2的profile是这样的:
Status
Duration
starting
0.000074
checking permissions
0.000012
Opening tables
0.000025
init
0.000032
System lock
0.000014
optimizing
0.000018
statistics
0.000025
preparing
0.000019
executing
0.000006
Sending data
2.318096
end
0.000020
query end
0.000034
closing tables
0.000022
freeing items
0.004327
logging slow query
0.000093
cleaning up
0.000060
可以看到id1耗时相对显著的是statistics,Sending data,主要集中在Sending data。
Sending data
The thread is reading and processing rows for a SELECT statement, and sending data to the client。
也就是说,id1=11111比id2=11111花费更多的时间在数据读取上。而id1上的是二级索引,用到该索引还有一个回表的花销,在这种数据基数小,索引的选择性就太差,这种情况不应该使用索引。
如果非要使用索引,就要避免回表,创建覆盖索引。
alter table index add index com_idx(id1,id2);
测试结果就可以看到id1=11111比id2=11111快了:
mysql> select * from index_test where id1=11111;
2097152 rows in set (1.71 sec)
mysql> select * from index_test where id2=11111;
2097152 rows in set (2.57 sec)
对应profile如下:
id1=11111
Status
Duration
starting
0.000149
checking permissions
0.000084
Opening tables
0.000032
init
0.000026
System lock
0.000013
optimizing
0.000013
statistics
0.000198
preparing
0.000019
executing
0.000006
Sending data
1.710508
end
0.000024
query end
0.000015
closing tables
0.000019
freeing items
0.003275
logging slow query
0.000068
cleaning up
0.000025
id2=11111
Status
Duration
starting
0.000066
checking permissions
0.000012
Opening tables
0.000020
init
0.000024
System lock
0.000011
optimizing
0.000013
statistics
0.000021
preparing
0.000015
executing
0.000006
Sending data
2.566770
end
0.000025
query end
0.000077
closing tables
0.000034
freeing items
0.004227
logging slow query
0.000093
cleaning up
0.000018
mysql 添加索引卡死_mysql添加索引,查询反而变慢相关推荐
- mysql 索引 变慢_mysql添加索引,查询反而变慢
1.表结构,time1添加普通索引: CREATE TABLE `time_table` ( `time1` INT(11) NULL DEFAULT NULL, `time2` INT(11) NU ...
- mysql添加索引后查询先用索引吗_mysql 添加索引后 在查询的时候是mysql就自动从索引里面查询了。还是查询的时候有单 独的参数查询索引?...
满意答案 llt1711 2014.06.20 采纳率:49% 等级:9 已帮助:614人 MYSQL创建索引对索引使用方式分两种: 1 由数据库查询优化器自动判断否使用索引: 2 用户写SQL ...
- mysql 表 视图 索引吗_Mysql多表查询, 视图,事务,索引,函数,go连接数据库
1.1 今日目标 理解多表查询 理解子查询 能够创建视图 能够删除视图 能够查看创建视图的SQL语句 能够理解事务的作用 能够操作事务 理解索引的作用 能够创建索引 能够删除索引 知道常用的函数 了解 ...
- mysql 查看索引深度_mysql 学习 - 索引深度理解
使用索引的代价 在熟悉了B+树索引原理之后,本篇文章的主题是唠叨如何更好的使用索引,虽然索引是个好东西,可不能乱建,在介绍如何更好的使用索引之前先要了解一下使用这玩意儿的代价,它在空间和时间上都会拖后 ...
- mysql实用管理器添加外键_MySQL 添加外键
MySQL 添加外键 MySQL 添加外键 DROP TABLE IF EXISTS `nation`; CREATE TABLE `nation`( `pii_Nation` smallint(2) ...
- mysql数据库优化教程_mysql数据库索引优化学习教程
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是 ...
- mysql 联合索引 性能_mysql:联合索引及优化
命名规则:表名_字段名 1.需要加索引的字段,要在where条件中 2.数据量少的字段不需要加索引 3.如果where条件中是OR关系,加索引不起作用 4.符合最左原则 尽量不要用or,如果可以用un ...
- mysql 索引 测试_mysql的索引测试
Mysql高级 mysql索引测试 一.生成测试数据 1.创建测试表 /*创建t_user表用于数据测试*/ DROP TABLE IF EXISTS t_user; CREATE TABLE `t_ ...
- mysql 索引原理_MySQL InnoDB索引原理和算法
也许你经常用MySQL,也会经常用索引,但是对索引的原理和高级功能却并不知道,我们在这里一起学习下. InnoDB存储索引 在数据库中,如果索引太多,应用程序的性能可能会受到影响:如果索引太少,又会对 ...
最新文章
- 活久见!新泽西州长急聘COBOL程序员!网传去应聘的程序员最小年龄都在 60 岁以上!...
- Android开发实践:如何设置NDK的编译选项
- 关于Neighbour table overflow消息
- 【机器学习】HOG+SVM进行车辆检测的流程及源码
- mysql concat 日期_mysql group_concat时间用法
- html5判断多选框是否选择的函数,复选框(checkbox)、多选框
- synchronized猎奇
- 修改JSONArray里所有key的值
- Linux进阶之进程与线程
- 抖音创作规范_实体店如何借势抖音为门店获客?
- 一文带你看透手机号码归属地
- 进化算法之粒子群算法介绍附代码——PSO
- typedef与define 傻傻的分不清楚
- python manage.py makemigrations执行完无反应的解决办法
- 万豪环保系列之水箱自洁消毒器
- python循环语句if语句的题目_Python if语句 for语句 while循环的练习
- allrgro17.2转AD19方法,实测
- adb发送什么命令能在手机屏幕弹窗显示_Android 手机投屏在 Ubuntu 上的方法
- php的ceil,php ceil函数怎么用?
- PAT 1056 Mice and Rice
热门文章
- k8s安全 认证 鉴权 准入控制之二:授权(Authorization)
- 一文读懂Thread技术的起源、原理及发展
- android 微信红包程序,Android仿微信红包
- Build.MODEL中一个空格引发的血案
- 关于各个数据库的常用数据库引擎介绍
- 电感-温升电流-RMS电流-饱和电流-额定电流
- springboot整合redis实现消息队列
- c# mysql 连接串_C#数据库连接字符串
- php垂直居中代码_div中五种方法实现内容垂直居中
- 《程序设计基础》 第十章 函数与程序结构 7-2 汉诺(Hanoi)塔问题 (20 分)