MySQL索引性能测试

MySQL索引性能测试

 

blog文档结构图:

 

很长一段时间没学习MySQL了,一直致力于oracle的研究,最近得空了就再拾起MySQL看看吧,记得去年发布过的2篇MySQL文章:

    MySQL 5.6.21下载安装之下载篇(一)  : http://blog.itpub.net/26736162/viewspace-1349705/

    MySQL 5.6.21下载安装之安装篇(二): http://blog.itpub.net/26736162/viewspace-1349787/

今天我们就来看看mysql中索引的性能测试:

1  准备环境

1.1  在数据库中创建测试表test1

[root@rhel6_lhr ~]# mysql -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 14

Server version: 5.6.21-enterprise-commercial-advanced MySQL Enterprise Server - Advanced Edition (Commercial)

 

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

 

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

 

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| db1                |

| db4                |

| lhr_test           |

| mysql              |

| opensource         |

| opesource          |

| performance_schema |

| test               |

| wyzc               |

+--------------------+

10 rows in set (0.00 sec)

 

mysql> use lhr_test;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

 

Database changed

mysql> create table test1(

    -> id int,

    -> num int,

    -> pass varchar(50)

    -> );

Query OK, 0 rows affected (0.01 sec)

 

mysql> desc test1;

+-------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id    | int(11)     | YES  |     | NULL    |       |

| num   | int(11)     | YES  |     | NULL    |       |

| pass  | varchar(50) | YES  |     | NULL    |       |

+-------+-------------+------+-----+---------+-------+

3 rows in set (0.00 sec)

 

mysql> create table test2(

    ->  id int,

    ->  num int,

    ->  pass varchar(50),

    ->  index idIdx (id)

    ->  );

Query OK, 0 rows affected (0.24 sec)

 

mysql> create table test3(

    ->  id int,

    ->  num int,

    ->  pass varchar(50)

    ->  );

reset query cache;Query OK, 0 rows affected (0.09 sec)

 

 

 

 

1.2  在系统提示符下执行如下语句创建100万行数据

在操作系统执行命令,生成100W条数据,其中-plhr中的lhr为mysql的密码,lhr_test为数据库名,该命令为一整条命令: for ((i=1;i /tmp/mysql.txt   2>&1  

 

经过漫长的等待后查看数据,受不了了,直接20W做测试吧:

 

 

 

 

2  简单测试索引性能

2.1  在有索引和没有索引的情况下执行查询

 

mysql> select * from test1 limit 10;

+------+------+----------------------------------+

| id   | num  | pass                             |

+------+------+----------------------------------+

|    1 |    1 | c4ca4238a0b923820dcc509a6f75849b |

|    2 |    3 | c81e728d9d4c2f636f067f89cc14862c |

|    3 |    4 | eccbc87e4b5ce2fe28308fd9f2a7baf3 |

|    4 |    5 | a87ff679a2f3e71d9181a67b7542122c |

|    5 |    5 | e4da3b7fbbce2345d7772b0674a318d5 |

|    6 |    6 | 1679091c5a880faf6fb5e6087eb1b2dc |

|    7 |   10 | 8f14e45fceea167a5a36dedd4bea2543 |

|    8 |   12 | c9f0f895fb98ab9159f51fd0297e236d |

|    9 |   12 | 45c48cce2e2d7fbdea1afc51c7c6ad26 |

|   10 |   12 | d3d9446802a44259755d38e6d163e820 |

+------+------+----------------------------------+

10 rows in set (0.00 sec)

 

mysql> reset query cache; ---清空缓存

Query OK, 0 rows affected (0.18 sec)

 

mysql> select num,pass   from test1 where id>=50000 and id

+-------+----------------------------------+

| num   | pass                             |

+-------+----------------------------------+

| 66755 | 1017bfd4673955ffee4641ad3d481b1c |

| 70239 | 334146de1b9346272cb013adf1a35aea |

| 93704 | f67fe69d3660b4d35a731817b538b21d |

| 90594 | 0cce9d48eb96fdf93fbae8640d547b8e |

| 94673 | 171ab172efb24344684eca5b04abffca |

| 51476 | e7beb1dcf073b1d1e700fb02eccaf064 |

| 78604 | 2432fc2efe99899b0ecff8ade0211e7d |

| 62059 | 1cc41f4ab8528178818a29b9ef5fabbb |

| 94777 | 79c3489e2392afd26733d285dee3abd0 |

| 71807 | f0547ecd4e64a31e247c34b64547f812 |

| 62106 | 3e53ae683f8e8c84221db763b30fe907 |

| 74578 | fbbbadb6d1a15c0c924c73b0b0a4b7cb |

| 91069 | 9ba86c2987b9321a45b4dbf1eff6bb4a |

| 71692 | 8ec41a3e649625a55ceafc35f6fa45e8 |

| 72179 | 87b0cba64000c51c883f57274c04519c |

| 96570 | f7c3c4088dfe80933e84ca084fa3524a |

| 70295 | 5a5a84625f44b7e7345b4ea6fde06627 |

| 68758 | 85dbdb1cbb78b9be83ccedd468732e0a |

| 77853 | 16d37a42180158171d57e1cc8122b415 |

| 81193 | c3a8217c9d3a5d9c5e76a77d8f4a8fde |

| 71512 | 4e2598d3fa41ae72d1927b81328dbd51 |

| 87838 | 81b993dae9d5735b0714c325c526aee5 |

| 51719 | d3d2a1a264feb84bd8ba9d0557aafca8 |

| 88469 | d5e390212ea61535b492b740102df78a |

| 92232 | cf50b28ef624912ff106c57ca9be41dc |

| 67030 | a4eacdf08e8fda83c7784c8fd21f7811 |

| 93650 | 9a84af5408986faab11f648a07867d84 |

| 70810 | 31bd7cc9213175d709fcfa2eeb4b202a |

| 77757 | 2d084a4acd512e6314d6e8ae111b8205 |

| 66555 | 2a12b41adeedc754b55ec468d1a41d09 |

| 77727 | 33702a9c691c0f5aaac103d7dd1952eb |

| 92189 | d081111dbdee3c687d1439b444d64004 |

| 90372 | dfdc9e0c03a33349408e99f28d07f899 |

| 91206 | 0610027c7b4268080e7c1c5f04af05a7 |

| 77903 | cb07accc409bbb4c0adc6afb26cf351b |

| 55402 | a1f3a4e959c66a4dd4f330f13ff4d808 |

| 75258 | 9f75e281cbe6072bd91a286e64fb6f0d |

| 88422 | 9bf3f8e2f454487987a4888544f9e1be |

| 76166 | 664a26f366b9ef4988631e95af9b366d |

| 87260 | f19ea2ad04c46f33134d405510650a60 |

| 73856 | 3b4421d0ab0e43c65932c51fb58f593f |

| 89850 | ca355f31b8e517abc70bf477ca77f4ce |

| 84650 | afa8024de2c03966e71d6f94a93b6b93 |

| 63982 | ce9e053a63f6a8aed199bed09f1e498e |

| 92551 | 3cf419e05d85881157b758a01c6ef399 |

| 80764 | af7994b458c40e4a18ec60f5e622e522 |

| 50054 | c3beb22d8bb8a4b874fd7bb8a8914643 |

| 72336 | 5f9f76d679371d223deeda050bdc9d85 |

| 85120 | 218171bd4087237acdcc6d3846b9cda5 |

| 85468 | d38aad5d5676be87eaf6ade964caff4f |

+-------+----------------------------------+

50 rows in set (0.15 sec)

 

 

mysql> insert into test2 select * from test1;

Query OK, 225494 rows affected (2.53 sec)

Records: 225494  Duplicates: 0  Warnings: 0

 

mysql>  reset query cache;

Query OK, 0 rows affected (0.00 sec)

 

mysql> explain select num,pass   from test2 where id>=50000 and id

+----+-------------+-------+-------+---------------+-------+---------+------+------+-----------------------+

| id | select_type | table | type  | possible_keys | key   | key_len | ref  | rows | Extra                 |

+----+-------------+-------+-------+---------------+-------+---------+------+------+-----------------------+

|  1 | SIMPLE      | test2 | range | idIdx         | idIdx | 5       | NULL |   49 | Using index condition |

+----+-------------+-------+-------+---------------+-------+---------+------+------+-----------------------+

1 row in set (0.00 sec)

 

mysql>  explain select num,pass   from test1  where id>=50000 and id

+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+

| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows   | Extra       |

+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+

|  1 | SIMPLE      | test1 | ALL  | NULL          | NULL | NULL    | NULL | 226851 | Using where |

+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+

1 row in set (0.00 sec)

 

mysql> reset query cache;

Query OK, 0 rows affected (0.00 sec)

 

mysql>  select num,pass   from test2 where id>=50000 and id

+-------+----------------------------------+

| num   | pass                             |

+-------+----------------------------------+

| 66755 | 1017bfd4673955ffee4641ad3d481b1c |

| 70239 | 334146de1b9346272cb013adf1a35aea |

| 93704 | f67fe69d3660b4d35a731817b538b21d |

| 90594 | 0cce9d48eb96fdf93fbae8640d547b8e |

| 94673 | 171ab172efb24344684eca5b04abffca |

| 51476 | e7beb1dcf073b1d1e700fb02eccaf064 |

| 78604 | 2432fc2efe99899b0ecff8ade0211e7d |

| 62059 | 1cc41f4ab8528178818a29b9ef5fabbb |

| 94777 | 79c3489e2392afd26733d285dee3abd0 |

| 71807 | f0547ecd4e64a31e247c34b64547f812 |

| 62106 | 3e53ae683f8e8c84221db763b30fe907 |

| 74578 | fbbbadb6d1a15c0c924c73b0b0a4b7cb |

| 91069 | 9ba86c2987b9321a45b4dbf1eff6bb4a |

| 71692 | 8ec41a3e649625a55ceafc35f6fa45e8 |

| 72179 | 87b0cba64000c51c883f57274c04519c |

| 96570 | f7c3c4088dfe80933e84ca084fa3524a |

| 70295 | 5a5a84625f44b7e7345b4ea6fde06627 |

| 68758 | 85dbdb1cbb78b9be83ccedd468732e0a |

| 77853 | 16d37a42180158171d57e1cc8122b415 |

| 81193 | c3a8217c9d3a5d9c5e76a77d8f4a8fde |

| 71512 | 4e2598d3fa41ae72d1927b81328dbd51 |

| 87838 | 81b993dae9d5735b0714c325c526aee5 |

| 51719 | d3d2a1a264feb84bd8ba9d0557aafca8 |

| 88469 | d5e390212ea61535b492b740102df78a |

| 92232 | cf50b28ef624912ff106c57ca9be41dc |

| 67030 | a4eacdf08e8fda83c7784c8fd21f7811 |

| 93650 | 9a84af5408986faab11f648a07867d84 |

| 70810 | 31bd7cc9213175d709fcfa2eeb4b202a |

| 77757 | 2d084a4acd512e6314d6e8ae111b8205 |

| 66555 | 2a12b41adeedc754b55ec468d1a41d09 |

| 77727 | 33702a9c691c0f5aaac103d7dd1952eb |

| 92189 | d081111dbdee3c687d1439b444d64004 |

| 90372 | dfdc9e0c03a33349408e99f28d07f899 |

| 91206 | 0610027c7b4268080e7c1c5f04af05a7 |

| 77903 | cb07accc409bbb4c0adc6afb26cf351b |

| 55402 | a1f3a4e959c66a4dd4f330f13ff4d808 |

| 75258 | 9f75e281cbe6072bd91a286e64fb6f0d |

| 88422 | 9bf3f8e2f454487987a4888544f9e1be |

| 76166 | 664a26f366b9ef4988631e95af9b366d |

| 87260 | f19ea2ad04c46f33134d405510650a60 |

| 73856 | 3b4421d0ab0e43c65932c51fb58f593f |

| 89850 | ca355f31b8e517abc70bf477ca77f4ce |

| 84650 | afa8024de2c03966e71d6f94a93b6b93 |

| 63982 | ce9e053a63f6a8aed199bed09f1e498e |

| 92551 | 3cf419e05d85881157b758a01c6ef399 |

| 80764 | af7994b458c40e4a18ec60f5e622e522 |

| 50054 | c3beb22d8bb8a4b874fd7bb8a8914643 |

| 72336 | 5f9f76d679371d223deeda050bdc9d85 |

| 85120 | 218171bd4087237acdcc6d3846b9cda5 |

| 85468 | d38aad5d5676be87eaf6ade964caff4f |

+-------+----------------------------------+

50 rows in set (0.00 sec)

 

 

 

2.2  在有索引和没有索引的情况下新增数据

 

 

 

mysql>  reset query cache;

Query OK, 0 rows affected (0.00 sec)

 

mysql>  insert into test3 select * from test1;

Query OK, 225494 rows affected (1.67 sec)

Records: 225494  Duplicates: 0  Warnings: 0

 

mysql>

 

 

3  总结


表名


表属性


查询(单位:秒)


插入(单位:秒)


test1


无索引


0.15


 


test2


有索引


0.00


2.53


test3


无索引


 


1.67

 

 

结论:通常情况下,有索引的情况下查询比较快,插入比较慢,所以在大批量的数据导入操作中应该首先删除索引,待数据导入完成后再建立索引,由于深入学习过oracle,感觉在这里说这些似乎是废话,但认真做实验是一种态度,本blog中总有一些你不知道的,o(∩_∩)o 哈哈。

 

 

 

 

 

.............................................................................................................................

本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

ITPUB BLOG:http://blog.itpub.net/26736162

本文地址: http://blog.itpub.net/26736162/viewspace-1466094/

QQ:642808185 注明:ITPUB的文章标题

.............................................................................................................................

 

 

时间: 2024-10-03 16:02:31

MySQL索引性能测试的相关文章

MySQL索引的缺点以及MySQL索引在实际操作中有哪些事项_Mysql

以下的文章主要介绍的是MySQL索引的缺点以及MySQL索引在实际操作中有哪些事项是值得我们大家注意的,我们大家可能不知道过多的对索引进行使用将会造成滥用.因此MySQL索引也会有它的缺点: 虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT.UPDATE和DELETE.因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件. 建立索引会占用磁盘空间的索引文件.一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快. 索引只是提高效

mysql服务器性能测试怎么做

问题描述 mysql服务器性能测试怎么做 本人新搭建好一个mysql服务器,它的性能和处理能力该怎样来测试呢?包括用哪个工具,关注哪些性能参数? 解决方案 有很多这样的工具,比如说 mysqlslap Super-smack MySQL Benchmark loadrunner 但是不是说用工具就能准确度量出你的服务器性能了,因为工具仅仅是工具,压力测试仅仅是模拟测试. 真实场景下业务是多种多样的,用户的真实访问,真实的数据和查询请求不是简单靠工具能模拟出来的,dba的经验在这里非常关键. 解决

使用MYSQL索引

    关系数据库的世界是一个表与集合.表与集合上的运算占统治地位的世界.数据库是一个表的集合,而表又是行和列的集合.在发布一条SELECT 查询从表中进行检索行时,得到另一个行和列的集合.这些都是一些抽象的概念,对于数据库系统用来操纵表中数据的基本表示没有多少参考价值.另一个抽象概念是,表上的运算都同时进行:查询是一种概念性的集合运算,并且集合论中没有时间概念.当然,现实世界是相当不同的.数据库管理系统实现了抽象的概念,但是在实际的硬件    范围内要受到实际的物理约束.结牵檠ㄊ奔洌

添加mysql索引的3条原则

一,索引的重要性 索引用于快速找出在某个列中有一特定值的行.不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行.表越大,花费的时间越多.如果表中查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要看所有数据.注意如果你需要访问大部分行,顺序读取要快得多,因为此时我们避免磁盘搜索. 假如你用新华字典来查找"张"这个汉字,不使用目录的话,你可能要从新华字典的第一页找到最后一页,可能要花二个小时.字典越厚呢,你花的时间就越多.现在你使用目录来

MySQL索引经验之浅见

mysql|索引 在数据库表中,使用索引可以大大提高查询速度. 假如我们创建了一个testIndex表:CREATE TABLE testIndex(i_testID INT NOT NULL,vc_Name VARCHAR(16) NOT NULL); 我们随机向里面插入了1000条记录,其中有一条    i_testID    vc_Name      555    erquan     在查找vc_Name="erquan"的记录SELECT * FROM testIndex W

MySQL索引分析和优化

mysql|索引|优化 一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录数量越多,这个操作的代价就越高.如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置.如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍. 假设我们创建了一个名为people的表: CREATE TABL

加速PHP动态网站 MySQL索引分析和优化

本文主要讲述了如何加速动态网站的MySQL索引分析和优化. 一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录数量越多,这个操作的代价就越高.如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置.如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍. 假设我们创建了一个名为peo

加速动态网站 MySQL索引分析和优化

本文主要讲述了如何加速动态网站的MySQL索引分析和优化. 一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录数量越多,这个操作的代价就越高.如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置.如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍. 假设我们创建了一个名为peo

MySQL索引原理及慢查询优化

MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓"好马配好鞍",如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如"精通MySQL"."SQL语句优化"."了解数据库原理"等要求.我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,