mysql索引提升查询速度的实例测试
来源:互联网 发布:thinder 交友软件 编辑:程序博客网 时间:2024/06/05 19:17
我们都知道, 很多时候, 要对数据库增加索引, 可以提升查询速度, 有兴趣的可以看看数据库索引原理, 本文来实际测试一下。
测试数据库记录大概10000条, 先看看没有索引的情况。
综上所述:
1. 索引能提升查询速度。 当然, 索引也有弊端, 不能任意妄为。
2. 如上记录仅仅是10000条, 如果记录条数为100万, 那么索引的效果就更能很好体现了。
测试数据库记录大概10000条, 先看看没有索引的情况。
表结构为:
mysql> show create table tb_test; +---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | tb_test | CREATE TABLE `tb_test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'test', `name` varchar(32) NOT NULL COMMENT 'test', `score` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'test', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10004 DEFAULT CHARSET=utf8 COMMENT='测试表, 无实际作用' | +---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)开启profiling, 进行两次 select操作, 分析结果如下:
mysql> show profiles; +----------+------------+----------------------------------------------------+ | Query_ID | Duration | Query | +----------+------------+----------------------------------------------------+ | 10021 | 0.00306534 | select * from tb_test where name = 'n1' | | 10022 | 0.00298983 | select * from tb_test where score = 1 | +----------+------------+----------------------------------------------------+
将name字段设置为索引, 表结构为:
mysql> show create table tb_test; +---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | tb_test | CREATE TABLE `tb_test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'test', `name` varchar(32) NOT NULL COMMENT 'test', `score` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'test', PRIMARY KEY (`id`), KEY `idx_name` (`name`) ) ENGINE=InnoDB AUTO_INCREMENT=10004 DEFAULT CHARSET=utf8 COMMENT='测试表, 无实际作用' | +---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)再次进行两次相同的select操作, 分析结果如下:
mysql> show profiles; +----------+------------+----------------------------------------------------+ | Query_ID | Duration | Query | +----------+------------+----------------------------------------------------+ | 10021 | 0.00306534 | select * from tb_test where name = 'n1' | | 10022 | 0.00298983 | select * from tb_test where score = 1 | | 10023 | 0.00074623 | select * from tb_test where name = 'n1' | | 10024 | 0.00298101 | select * from tb_test where score = 1 | +----------+------------+----------------------------------------------------+可见, Query_ID为10023的那条查询快了很多。
继续将score字段设置为索引, 表结构为:
mysql> show create table tb_test; +---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | tb_test | CREATE TABLE `tb_test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'test', `name` varchar(32) NOT NULL COMMENT 'test', `score` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'test', PRIMARY KEY (`id`), KEY `idx_name` (`name`), KEY `idx_score` (`score`) ) ENGINE=InnoDB AUTO_INCREMENT=10004 DEFAULT CHARSET=utf8 COMMENT='测试表, 无实际作用' | +---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)进行两次相同的select操作, 分析结果如下:
mysql> show profiles; +----------+------------+----------------------------------------------------+ | Query_ID | Duration | Query | +----------+------------+----------------------------------------------------+ | 10021 | 0.00306534 | select * from tb_test where name = 'n1' | | 10022 | 0.00298983 | select * from tb_test where score = 1 | | 10023 | 0.00074623 | select * from tb_test where name = 'n1' | | 10024 | 0.00298101 | select * from tb_test where score = 1 | | 10027 | 0.00073865 | select * from tb_test where name = 'n1' | | 10028 | 0.00072649 | select * from tb_test where score = 1 | +----------+------------+----------------------------------------------------+可见, Query_ID为10027和10028d的那两条快了很多。
综上所述:
1. 索引能提升查询速度。 当然, 索引也有弊端, 不能任意妄为。
2. 如上记录仅仅是10000条, 如果记录条数为100万, 那么索引的效果就更能很好体现了。
阅读全文
0 0
- mysql索引提升查询速度的实例测试
- MySQL索引对数据库查询速度的显著提升
- 实例测试Mysql使用索引带来的效率提升
- 如何将你的 MySQL 查询速度提升 300 倍
- 如何将你的 MySQL 查询速度提升 300 倍
- 如何将你的 MySQL 查询速度提升 300 倍
- 如何将你的 MySQL 查询速度提升 300 倍
- mysql近500w条数据建立索引后查询速度还是提升很多
- 提升查询速度的方法
- 提高查询速度--数据库设计mysql索引
- 提高查询速度--数据库设计mysql索引
- MySQL > 建索引提高查询速度
- 通过建立索引优化MySQL查询速度
- mysql的速度测试
- mysql 索引对于select速度提升作用实验
- 在大量数据中进行查询,有无索引查询的速度效果测试
- SQLServer 提升查询速度
- 比较有索引和无索引的查询速度(在mysql数据库中)
- Cats and Fish 2017ACM-ICPC北京赛区/hihoCoder 1631
- 【辨异】relation, relationship
- idea 大姨妈之不能建立class
- 从浏览器上传图片到数据库的一种方式
- 欢迎使用CSDN-markdown编辑器
- mysql索引提升查询速度的实例测试
- HSB简介
- 基于 jdk 实现webservice查询天气预报
- CSS隐藏滚动栏
- Qt设置窗口、按钮背景色
- VS2017+QT5.9.1使用大漠插件(COM组件)
- 进程间、线程间通信方式小结
- (原创)spring注入service为null
- Linux下MySQL主从数据库配置