Mysql 百万级别的数据查询

前言

  • 众所周知,当一个数据库的单表数据量很大时,比如说是百万数量级的,如果我们使用普通的查询语句的话,耗时会非常多(相比加上索引),今天小编带领着大家做一下实验,见证一下具有二百多万条数据的单表,怎样优化查询语句。
  • 首先,我们需要往数据库中的某张表中查询百万条数据,小编插入了2646229条记录,请看下面截图。

这里写图片描述

普通的查询语句分析

  • 小编今天主要说的是简单查询语句和分页查询语句,我们先从简单的查询语句入手。 查询数据库中的第一条记录,查询条件没有加索引。截图如下

这里写图片描述

  • 这是Privilege表中的第一条记录,大家看一下查询时间,用了3.03秒,下面我们查询最后一条记录,截图如下。

这里写图片描述

  • 耗时还是3.03秒,可见,如果表中的数据量过大的话,我们如果不改变查询策略,及时查询表中的第一条数据,也会很耗时。现在,我们改变查询条件,将pid作为查询条件,因为pid为主键,数据库默认为主键索引,为了与上面一张图形成对比,我们也查询最后一条记录,即pid=2646430的一条记录,截图如下

这里写图片描述

  • 由图我们就可以看出,使用pid为查询条件查询表中的最后一条记录,耗时为0.00 sec,不能说不耗时,但相比3.03 sec来说,已经灰常短了。那是为什么哪?就是因为pid上有默认的主键索引,这就是索引的力量。

分页查询语句

在mysql中,当我们分页查询数据库中的记录时,莫过于使用limit函数了,那么我们接下来做一下实验。

从第1000数据开始查,查10数据

这里写图片描述 
耗时非常短是吧,0.00 sec

从第800000条数据开始查,查10条数据

这里写图片描述 
有图可以看出,耗时0.61 sec

查询此表中的最后10条记录

这里写图片描述 
由图可见,耗时2.89 sec ,所以,使用limit分页查询数据所耗的时间,与查询记录条数的起始位置有关,那怎么优化查询速度哪?那就使用索引吧!我将pid,name加上了覆盖索引,语句如下

alter table privilege add index pid_name (pid, name);
  • 1
  • 现在小编用limit函数只查pid 和 name两个字段,分页数据如果还需要别的字段,那么就将该字段与pid建立覆盖索引,置于覆盖索引是什么,小编一会儿再说。请看图,我们还是查询表中的最后十条记录。 
    这里写图片描述 
    耗时0.86 sec ,2.89 sec 而言,是不是快了很多。

小结

  • 从实验可以得出,表中的字段加上索引之后确实能提升查询的速度。当单表中的数据量达到百万之后,我们将数据库表中的数据从数据库中搜出来,再加上网络的传输,最终显示在某个网页上,岂不是更耗时,还有一点,在优化 语句的时候,我们尽量不要查询没有用的字段,不要动不动就将所有字段都查询出来,无论是对于数据库查询,还是网络传输,这都是耗时的。当然,索引也不是加上就是好的,当表中的数据没有太多事,加上索引反而是累赘,置于什么是覆盖索引,大家请看下一篇文章。
当进行百万级别数据量进行LIKE查询时,由于LIKE操作的模糊匹配特性,会导致查询速度变慢。这是因为MySQL在进行LIKE查询时需要遍历每一条数据,并逐个进行匹配,这个过程消耗了大量的时间和资源。 为了优化LIKE查询的速度,可以考虑以下几个方案: 1. 使用索引:在需要进行LIKE查询的列上创建索引,可以大大提高查询速度。可以使用全文索引(Full-text index)或者前缀索引(Prefix index)来加快模糊匹配的检索速度。 2. 使用全文搜索引擎:MySQL提供了全文搜索引擎(如MyISAM引擎),可以更高效地处理模糊匹配的查询。全文搜索引擎支持更为灵活的查询语法,并具有更好的性能。 3. 分页查询:如果查询结果集很大,可以考虑使用分页查询来减少单次查询数据量,从而提高查询速度。通过限制每次查询数据量,可以减少LIKE匹配的开销,并提升查询性能。 4. 使用其他查询优化技术:可以使用其他MySQL查询优化技术,如查询缓存、表分区、分表等,来改善数据库的性能。这些技术可以通过合理的数据库设计和查询规划,减少LIKE查询的压力。 总结起来,对于MySQL百万级别数据进行LIKE查询,可以通过创建合适的索引,在数据库设计和查询规划上做出优化,以提高查询性能和效率。同时,可以考虑使用全文搜索引擎等更高效的工具来处理模糊匹配的查询
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值