登录
首页 >  数据库 >  MySQL

mysql百万数据实践-索引

来源:SegmentFault

时间:2023-01-22 21:48:07 222浏览 收藏

数据库小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《mysql百万数据实践-索引》带大家来了解一下mysql百万数据实践-索引,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!

今天实践一下mysql数据库在大数据量的情况下如何优化,这里记录一下过程。
首先是生成百万级别的数据,直接上sql语句

//建表
CREATE TABLE `person` (
  `id` bigint(20) unsigned NOT NULL,
  `username` varchar(100) NOT NULL,
  `age` tinyint(3) unsigned NOT NULL,
  `sex` tinyint(1) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

//创建生成数据procedure,num代表生成数据量的大小
CREATE PROCEDURE `generate`(IN num INT)  
BEGIN     
    DECLARE char_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    DECLARE username VARCHAR(25) DEFAULT '';    
    DECLARE id int UNSIGNED;  
    DECLARE len int;  
    set id=1;  
    DELETE from person;  
    WHILE id  0 DO  
            SET username = CONCAT(username,substring(char_str,FLOOR(1 + RAND()*62),1));  
            SET len = len - 1;  
        END WHILE;   
        INSERT into person VALUES (id,username, FLOOR(RAND()*100), FLOOR(RAND()*2));  
        set id = id + 1;  
    END WHILE;  
END 
//最后执行generate,生成100万数据
CALL generate(1000000);

图片描述

接下来就看看查询耗费时间:

//查询第100万条数据
select * from person where username=`select`;
//查询第1条数据
select * from person where username=`65YsbqoyqkbNhQb`;
//查询第50万条数据
select * from person where username=`cFzIG8`;

图片描述
图片描述
图片描述

大概耗费0.16秒,如果是按照主键查询呢?

//按照主键查询,mysql默认会为主键生成索引
//查询第100万条数据
select * from person where id=1000000;
//查询第1条数据
select * from person where id=1;
//查询第50万条数据
select * from person where id=500000;

图片描述

耗费时间基本很少
那么为username创建索引看看效果

create index index_user on person(username(100));

图片描述

可以看到,查询时间和按主键进行查询差不多。说明索引对查询效果显著,但是相应的表的体积变大了,未创建索引之前表大概41.7M,创建完后表有59.8M。
下面看看插入的影响有多大。

图片描述

图片描述

可以看到有索引的插入语句耗时0.02秒,没有的基本忽略。

本篇关于《mysql百万数据实践-索引》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于数据库的相关知识,请关注golang学习网公众号!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>