资讯专栏INFORMATION COLUMN

mysql百万数据实践-索引

ivan_qhz / 2677人阅读

摘要:今天实践一下数据库在大数据量的情况下如何优化,这里记录一下过程。说明索引对查询效果显著,但是相应的表的体积变大了,未创建索引之前表大概,创建完后表有。下面看看插入的影响有多大。可以看到有索引的插入语句耗时秒,没有的基本忽略。

今天实践一下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 <= num DO  
        set len = FLOOR(1 + RAND()*25);  
        set username = "";  
        WHILE len > 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秒,没有的基本忽略。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/47492.html

相关文章

  • Mysql replace 与 insert on duplicate效率分析

    摘要:第一种方式不说了,和这两种方式,哪中效率更高一些呢,毕竟,我们的执行,追求的就是高效。数据库菜鸟一个,所知有限,如有纰漏,还请指教 导读 我们在向数据库里批量插入数据的时候,会遇到要将原有主键或者unique索引所在记录更新的情况,而如果没有主键或者unique索引冲突的时候,直接执行插入操作。 这种情况下,有三种方式执行: 直接 直接每条select, 判断, 然后insert,毫无...

    Muninn 评论0 收藏0
  • 数据

    摘要:编辑大咖说阅读字数用时分钟内容摘要对于真正企业级应用,需要分布式数据库具备什么样的能力相比等分布式数据库,他们条最佳性能优化性能优化索引与优化关于索引与优化的基础知识汇总。 mysql 数据库开发常见问题及优化 这篇文章从库表设计,慢 SQL 问题和误操作、程序 bug 时怎么办这三个问题展开。 一个小时学会 MySQL 数据库 看到了一篇适合新手的 MySQL 入门教程,希望对想学 ...

    LiveVideoStack 评论0 收藏0
  • 数据

    摘要:编辑大咖说阅读字数用时分钟内容摘要对于真正企业级应用,需要分布式数据库具备什么样的能力相比等分布式数据库,他们条最佳性能优化性能优化索引与优化关于索引与优化的基础知识汇总。 mysql 数据库开发常见问题及优化 这篇文章从库表设计,慢 SQL 问题和误操作、程序 bug 时怎么办这三个问题展开。 一个小时学会 MySQL 数据库 看到了一篇适合新手的 MySQL 入门教程,希望对想学 ...

    ixlei 评论0 收藏0
  • 数据

    摘要:编辑大咖说阅读字数用时分钟内容摘要对于真正企业级应用,需要分布式数据库具备什么样的能力相比等分布式数据库,他们条最佳性能优化性能优化索引与优化关于索引与优化的基础知识汇总。 mysql 数据库开发常见问题及优化 这篇文章从库表设计,慢 SQL 问题和误操作、程序 bug 时怎么办这三个问题展开。 一个小时学会 MySQL 数据库 看到了一篇适合新手的 MySQL 入门教程,希望对想学 ...

    mengbo 评论0 收藏0
  • 数据

    摘要:编辑大咖说阅读字数用时分钟内容摘要对于真正企业级应用,需要分布式数据库具备什么样的能力相比等分布式数据库,他们条最佳性能优化性能优化索引与优化关于索引与优化的基础知识汇总。 mysql 数据库开发常见问题及优化 这篇文章从库表设计,慢 SQL 问题和误操作、程序 bug 时怎么办这三个问题展开。 一个小时学会 MySQL 数据库 看到了一篇适合新手的 MySQL 入门教程,希望对想学 ...

    shuibo 评论0 收藏0

发表评论

0条评论

ivan_qhz

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<