每日新知——MySQL 查询流程&索引简介

544 阅读2分钟

MySQL 执行查询的流程

  • 客户端先通过连接器连接到 MySQL 服务器;
  • 连接器权限验证通过之后,先查询是否有查询缓存,如果有缓存(之前执行过此语句)则直接返回缓存数据,如果没有缓存则进入分析器;
  • 分析器会对查询语句进行语法分析和词法分析,判断 SQL 语法是否正确,如果查询语法错误会直接返回给客户端错误信息,如果语法正确则进入优化器;
  • 优化器是对查询语句进行优化处理,例如一个表里面有多个索引,优化器会判别哪个索引性能更好;
  • 优化器执行完就进入执行器,执行器则开始执行语句进行查询比对了,直到查询到满足条件的所有数据,然后进行返回。

MySQL索引

索引是什么

索引是一种能帮助 MySQL 提高查询效率的数据结构。

索引优缺点

索引的优点如下:

  • 快速访问数据表中的特定信息,提高检索速度。
  • 创建唯一性索引,保证数据表中每一行数据的唯一性。
  • 加速表与表之间的连接。
  • 使用分组和排序进行数据检索时,可以显著减少查询中分组和排序的时间。

索引的缺点:

  • 虽然提高了的查询速度,但却降低了更新表的速度,比如 update、insert,因为更新数据时,MySQL 不仅要更新数据,还要更新索引文件;
  • 建立索引会占用磁盘文件的索引文件。

索引注意事项

  • 使用短索引,短索引不仅可以提高查询速度,更能节省磁盘空间和 I/O 操作;
  • 索引列排序,MySQL 查询只使用一个索引,因此如果 where 子句中已经使用了索引的话,那么 order by 中的列是不会使用索引的,因此数据库默认排序可以符合要求的情况下,不要进行排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引;
  • like 语句操作,一般情况下不鼓励使用 like 操作,如果非使用不可, 注意 like "%aaa%" 不会使用索引,而like "aaa%"可以使用索引;
  • 不要在列上进行运算;
  • 不适用 NOT IN 和 <> 操作。

end

如有问题,请留言或者发送邮件,感谢您的阅读