依照楼主的数据,我也造了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添加索引,查询反而变慢相关推荐

  1. mysql 索引 变慢_mysql添加索引,查询反而变慢

    1.表结构,time1添加普通索引: CREATE TABLE `time_table` ( `time1` INT(11) NULL DEFAULT NULL, `time2` INT(11) NU ...

  2. mysql添加索引后查询先用索引吗_mysql 添加索引后 在查询的时候是mysql就自动从索引里面查询了。还是查询的时候有单 独的参数查询索引?...

    满意答案 llt1711 2014.06.20 采纳率:49%    等级:9 已帮助:614人 MYSQL创建索引对索引使用方式分两种: 1 由数据库查询优化器自动判断否使用索引: 2 用户写SQL ...

  3. mysql 表 视图 索引吗_Mysql多表查询, 视图,事务,索引,函数,go连接数据库

    1.1 今日目标 理解多表查询 理解子查询 能够创建视图 能够删除视图 能够查看创建视图的SQL语句 能够理解事务的作用 能够操作事务 理解索引的作用 能够创建索引 能够删除索引 知道常用的函数 了解 ...

  4. mysql 查看索引深度_mysql 学习 - 索引深度理解

    使用索引的代价 在熟悉了B+树索引原理之后,本篇文章的主题是唠叨如何更好的使用索引,虽然索引是个好东西,可不能乱建,在介绍如何更好的使用索引之前先要了解一下使用这玩意儿的代价,它在空间和时间上都会拖后 ...

  5. mysql实用管理器添加外键_MySQL 添加外键

    MySQL 添加外键 MySQL 添加外键 DROP TABLE IF EXISTS `nation`; CREATE TABLE `nation`( `pii_Nation` smallint(2) ...

  6. mysql数据库优化教程_mysql数据库索引优化学习教程

    MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是 ...

  7. mysql 联合索引 性能_mysql:联合索引及优化

    命名规则:表名_字段名 1.需要加索引的字段,要在where条件中 2.数据量少的字段不需要加索引 3.如果where条件中是OR关系,加索引不起作用 4.符合最左原则 尽量不要用or,如果可以用un ...

  8. mysql 索引 测试_mysql的索引测试

    Mysql高级 mysql索引测试 一.生成测试数据 1.创建测试表 /*创建t_user表用于数据测试*/ DROP TABLE IF EXISTS t_user; CREATE TABLE `t_ ...

  9. mysql 索引原理_MySQL InnoDB索引原理和算法

    也许你经常用MySQL,也会经常用索引,但是对索引的原理和高级功能却并不知道,我们在这里一起学习下. InnoDB存储索引 在数据库中,如果索引太多,应用程序的性能可能会受到影响:如果索引太少,又会对 ...

最新文章

  1. 活久见!新泽西州长急聘COBOL程序员!网传去应聘的程序员最小年龄都在 60 岁以上!...
  2. Android开发实践:如何设置NDK的编译选项
  3. 关于Neighbour table overflow消息
  4. 【机器学习】HOG+SVM进行车辆检测的流程及源码
  5. mysql concat 日期_mysql group_concat时间用法
  6. html5判断多选框是否选择的函数,复选框(checkbox)、多选框
  7. synchronized猎奇
  8. 修改JSONArray里所有key的值
  9. Linux进阶之进程与线程
  10. 抖音创作规范_实体店如何借势抖音为门店获客?
  11. 一文带你看透手机号码归属地
  12. 进化算法之粒子群算法介绍附代码——PSO
  13. typedef与define 傻傻的分不清楚
  14. python manage.py makemigrations执行完无反应的解决办法
  15. 万豪环保系列之水箱自洁消毒器
  16. python循环语句if语句的题目_Python if语句 for语句 while循环的练习
  17. allrgro17.2转AD19方法,实测
  18. adb发送什么命令能在手机屏幕弹窗显示_Android 手机投屏在 Ubuntu 上的方法
  19. php的ceil,php ceil函数怎么用?
  20. PAT 1056 Mice and Rice

热门文章

  1. k8s安全 认证 鉴权 准入控制之二:授权(Authorization)
  2. 一文读懂Thread技术的起源、原理及发展
  3. android 微信红包程序,Android仿微信红包
  4. Build.MODEL中一个空格引发的血案
  5. 关于各个数据库的常用数据库引擎介绍
  6. 电感-温升电流-RMS电流-饱和电流-额定电流
  7. springboot整合redis实现消息队列
  8. c# mysql 连接串_C#数据库连接字符串
  9. php垂直居中代码_div中五种方法实现内容垂直居中
  10. 《程序设计基础》 第十章 函数与程序结构 7-2 汉诺(Hanoi)塔问题 (20 分)