Mysql优化小技巧

作者: 潇湘Blake | 来源:发表于2018-10-29 17:45 被阅读4次

问题

假设现在有一个千万条记录的表,要针对不同的需求,进行相应的查询,修改,删除操作。要求单条sql执行时间不能超过一秒,请问如何解决?

构造假数据

为了直观感受速度,先写一个存储过程,插入10000000(一千万)条数据到表中。

CREATE DEFINER=`homestead`@`%` PROCEDURE `create_feedback`()
BEGIN
DECLARE i INT;
START TRANSACTION;
SET i=1;
WHILE i<10000000 DO
    INSERT INTO `tax`.`feedback`(`user_name`, `content`) VALUES ('测试用户', concat('测试反馈', i));
    SET i=i+1;
END WHILE;
COMMIT;
END

查询数据总条数

常见的查询方式是直接使用count函数,但是在数据量过大时,速度不够快。
select count(*) from table;
通过count(id),count(*),count(1)三种方式计算,速度相差不大,都不够快

通过count()函数查询
通常在表设计之初,自增量id通常从1开始增长,并且每一行数据都不应该被直接delete,所以id的最大值就是总条数,因此也可以直接查询id的最大值。
select max(id) from table;
通过id计算总量
速度得到了极大的提高。

查询符合某条件的数据

工作中常常需要通过某些条件检索匹配的数据,例如根据手机号查询用户,或是根据某字段查询。通常提高速度的方法有以下几种:

1. 建立索引

mysql对于主键会自动创建索引,在建立了索引的字段上进行查询速度会变得非常快。
例如,我们对id(有索引)和content(无索引)分别进行一次查询,比较他们的速度。

有无索引对比
id建立了索引,甚至不需要0.01秒就能查询出来。而content因为没有建立索引,花费了6秒的时间。由此可见索引对于查询速度的影响极大。

2. 巧用limit,避免全表查询

除了建立索引以外,还有一个提高速度的小技巧是尽量避免全表查询。有的时候我们明知道记录可能只有一条,那么就通过limit 1进行限制。mysql在执行时,一旦找到符合条件的记录,达到了limit就将停止检索,立即返回。

limit对比
可以看出增加了limit之后,mysql查询到符合条件的行就立即返回了。

无索引下的全表遍历方式

在前面的尝试过程中,我们似乎发现,id越小的行,总能越快查询到,而id较大的行,速度更慢。由此我们猜测,mysql在无索引的字段上进行查询时,是根据id由小到大进行依次匹配的。于是我们改变数字看一看

查询时间随id变化
可以发现,时间跟随id变化,越来越久,而在id达到最大值时,和全表检索的时间几乎一致。
最大id和全表检索对比

总结

最后总结一下,mysql优化的小技巧:

  1. 使用max(id)而不是count(*)进行总量计数。
    当然,前提是id是从1开始自增长,并且没有行被删除过。
  2. 对于常用的查询字段建立索引。
    索引的速度优势显而易见。未建立索引时,全表查询是线性的。
  3. 使用limit避免全表检索。
    有的查询明知道结果只会有一条,使用limit 1。如果查询结果需要分页显示,那么不妨使用limit,多次查询。

相关文章

  • Mysql优化小技巧

    问题 假设现在有一个千万条记录的表,要针对不同的需求,进行相应的查询,修改,删除操作。要求单条sql执行时间不能超...

  • MySQL索引知多少

    mysql索引 总结关于mysql的索引,查询优化,SQL技巧等 1 索引类型 B-Tree索引 Hash索引 ...

  • Mysql优化技巧

    1.定义结构的优化(字段类型的选择)。 2.表操作的优点(重点sql查询的优化 、explain 定位和优化SQL...

  • mysql优化技巧

    [图片上传失败...(image-5ecabb-1541744995168)] 内容整理于网络 一、EXPLAIN...

  • 10分钟掌握数据类型、索引、查询的MySQL优化技巧

    10分钟掌握数据类型、索引、查询的MySQL优化技巧? 不存在的! 本文的内容是总结一些MySQL的常见使用技巧,...

  • MySQL数据库性能优化技巧

    原文地址:MySQL 性能优化技巧[http://www.extlight.com/2017/10/07/MySQ...

  • 源码阅读及开发小技巧

    参考 MySQL · 代码阅读 · MYSQL开源软件源码阅读小技巧

  • mysql 索引优化

    索引的存储分类 索引的创建与删除 索引查看 mysql常用语句优化技巧定期优化表 常用优化 2.应尽量避免在whe...

  • Python-02进阶-07代码优化技巧

    代码优化技巧 优化原则 核心技巧 其他技巧 Python 代码性能优化技巧 常用代码优化技巧 sort()优于so...

  • mysql查询优化技巧

    工作中,经常有运营需求用于统计线上数据,实际场景中两个百万级表联合查询,往往会大大消耗查询时间。针对此问题,解决思...

网友评论

    本文标题:Mysql优化小技巧

    本文链接:https://www.haomeiwen.com/subject/nvvbtqtx.html