我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL语句的优化原则

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL语句的优化原则

这篇文章主要讲解了“MySQL语句的优化原则”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL语句的优化原则”吧!

1、使用索引来更快地遍历表。

  缺省情况下建立的索引是非群集索引,但有时它并不是最佳的。在非群集索引下,数据在物理上随机存放在数据页上。合理的索引设计要建立在对各种查询的分析和预测上。一般来说:
  a.有大量重复值、且经常有范围查询( > ,< ,> =,< =)和order by、group by发生的列,可考虑建立群集索引;
  b.经常同时存取多列,且每列都含有重复值可考虑建立组合索引;
  c.组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列。索引虽有助于提高性能但不是索引越多越好,恰好相反过多的索引会导致系统低效。用户在表中每加进一个索引,维护索引集合就要做相应的更新工作。

  2、在海量查询时尽量少用格式转换。
  3、ORDER BY和GROPU BY使用ORDER BY和GROUP BY短语,任何一种索引都有助于SELECT的性能提高。

  4、任何对列的操作都将导致表扫描,它包括函数、计算表达式等等,查询时要尽可能将操作移至等号右边。

  5、IN、OR子句常会使用工作表,使索引失效。如果不产生大量重复值,可以考虑把子句拆开。拆开的子句中应该包含索引。
  6、只要能满足你的需求,应尽可能使用更小的数据类型:例如使用MEDIUMINT代替INT

  7、尽量把所有的列设置为NOT NULL,如果你要保存NULL,手动去设置它,而不是把它设为默认值。
  8、尽量少用VARCHAR、TEXT、BLOB类型
  9、如果你的数据只有你所知的少量的几个。最好使用ENUM类型
  10、正如graymice所讲的那样,建立索引。

  以下是我做的一个实验,可以发现索引能极大地提高查询的效率:
我有一个会员信息表users,里边有37365条用户记录:
在不加索引的时候进行查询:
sql语句A:

复制内容到剪贴板

代码:

select * from users where username like %许%;

在Mysql-Front中的8次查询时长为:1.40,0.54,0.54,0.54,0.53,0.55,0.54 共找到960条记录
sql语句B:

复制内容到剪贴板

代码:

select * from users where username like 许%;

在Mysql-Front中的8次查询时长为:0.53,0.53,0.53,0.54,0.53,0.53,0.54,0.54 共找到836条记录
sql语句C:

复制内容到剪贴板

代码:

select * from users where username like %许;

在Mysql-Front中的8次查询时长为:0.51,0.51,0.52,0.52,0.51,0.51,0.52,0.51 共找到7条记录
为username列添加索引:

复制内容到剪贴板

代码:

create index usernameindex on users(username(6));

再次查询:
sql语句A:

复制内容到剪贴板

代码:

select * from users where username like %许%;

在Mysql-Front中的8次查询时长为:0.35,0.34,0.34,0.35,0.34,0.34,0.35,0.34 共找到960条记录
sql语句B:

复制内容到剪贴板

代码:

select * from users where username like 许%;

在Mysql-Front中的8次查询时长为:0.06,0.07,0.07,0.07,0.07,0.07,0.06,0.06 共找到836条记录
sql语句C:

复制内容到剪贴板

代码:

select * from users where username like %许;

在Mysql-Front中的8次查询时长为:0.32,0.31,0.31,0.32,0.31,0.32,0.31,0.31 共找到7条记录

  在实验过程中,我没有另开任何程序,以上的数据说明在单表查询中,建立索引的可以极大地提高查询速度。

  另外要说的是如果建立了索引,对于like 许%类型的查询,速度提升是最明显的。因此,我们在写sql语句的时候也尽量采用这种方式查询。

  对于多表查询我们的优化原则是:
  尽量将索引建立在:left join on/right join on ... +条件,的条件语句中所涉及的字段上。

  多表查询比单表查询更能体现索引的优势。

  11、索引的建立原则:
  如果一列的中数据的前缀重复值很少,我们最好就只索引这个前缀。Mysql支持这种索引。我在上面用到的索引方法就是对username最左边的6个字符进行索引。索引越短,占用的 磁盘空间越少,在检索过程中花的时间也越少。这方法可以对最多左255个字符进行索引。

  在很多场合,我们可以给建立多列数据建立索引。
  索引应该建立在查询条件中进行比较的字段上,而不是建立在我们要找出来并且显示的字段上
  12、一往情深问到的问题:IN、OR子句常会使用工作表,使索引失效。如果不产生大量重复值,可以考虑把子句拆开。拆开的子句中应该包含索引。

这句话怎么理解决,请举个例子
例子如下:
如果在fields1和fields2上同时建立了索引,fields1为主索引
以下sql会用到索引

复制内容到剪贴板

代码:

select * from tablename1 where fields1=value1 and fields2=value2

以下sql不会用到索引

复制内容到剪贴板

代码:

select * from tablename1 where fields1=value1 or fields2=value2

  13.索引带来查询上的速度的大大提升,但索引也占用了额外的硬盘空间(当然现在一般硬盘空间不成问题),而且往表中插入新记录时索引也要随着更新这也需要一定时间.
  有些表如果经常insert,而较少select,就不用加索引了.不然每次写入数据都要重新改写索引,花费时间; 这个视实际情况而定,通常情况下索引是必需的.

  14.我在对查询效率有怀疑的时候,一般是直接用Mysql的Explain来跟踪查询情况.
  你用Mysql-Front是通过时长来比较,我觉得如果从查询时扫描字段的次数来比较更精确一些.
 

感谢各位的阅读,以上就是“MySQL语句的优化原则”的内容了,经过本文的学习后,相信大家对MySQL语句的优化原则这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL语句的优化原则

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何实现MySQL底层优化:SQL语句优化的常见技巧和原则

MySQL数据库作为一种常见的关系型数据库,随着数据库中数据量的增加和查询需求的变化,底层优化变得尤为重要。在进行MySQL底层优化的过程中,SQL语句优化是一项至关重要的工作。本文将讨论SQL语句优化的常见技巧和原则,并提供具体的代码示例
如何实现MySQL底层优化:SQL语句优化的常见技巧和原则
2023-11-09

MySQL之优化SELECT语句

MySQL之优化SELECT语句 文章目录 MySQL之优化SELECT语句摘要:引言:1. MySQL性能提成优化概述2. WHERE子句优化3. 范围优化4. 哈希联接优化5. 储存引擎下的优化6. 索引条件下推优化7.嵌套循环
2023-08-16

mysql查询语句优化

这篇说下mysql查询语句优化是否请求了不需要的数据典型案例:查询不需要的记录,多表关联时返回全部列,总是取出全部列,重复查询相同的数据。是否在扫描额外的记录最简单的衡量查询开销的指标。响应数据扫描的行数返回的行数 访问类型在评估查询开销
2022-05-11

MySQL优化SQL语句的技巧

在面对不够优化、或者性能极差的SQL语句时,我们通常的想法是将重构这个SQL语句,让其查询的结果集和原来保持一样,并且希望SQL性能得以提升。而在重构SQL时,一般都有一定方法技巧可供参考,本文将介绍如何通过这些技巧方法来重构SQL。 一、
2022-05-24

mysql的sql语句如何优化

要优化MySQL的SQL语句,可以采取以下几个方法:1. 使用索引:使用适当的索引可以大大提高查询性能。可以使用`EXPLAIN`命令来分析SQL语句的执行计划,以确定是否需要添加索引。2. 优化查询语句:避免使用`SELECT *`查询所
2023-09-27

MySQL数据类型优化原则

MySQL支持的数据类型很多,选择正确的数据类型对于高性能至关重要。下面几个简单的原则都有助于做出更好的选择。更小的通常更好应该尽量使用可以正确储存数据的最小数据类型。更小的数据类型通常更快,因为它们占用更少的磁盘、内存和CPU缓存,并且处
2022-05-31

mysql索引优化的原则是什么

MySQL索引优化的原则包括以下几点:选择合适的索引类型:MySQL支持多种索引类型,包括B-Tree索引、哈希索引和全文索引等。根据查询的特点和数据的特性选择合适的索引类型。选择合适的索引列:选择经常被查询的列作为索引列,可以加快查询的速
mysql索引优化的原则是什么
2023-10-28

编程热搜

目录