美文网首页mysql
MySQL优化建议

MySQL优化建议

作者: 有趣的数据 | 来源:发表于2020-02-15 15:18 被阅读0次

        对于数据分析而言,可能需要经常从数据库中查询数据,那么怎样才能更优地获取数据库中的数据呢,这里简单介绍了几种MySQL的优化建议。

1. 避免使用 select *

        你需要什么信息,就查询什么信息,查询的多了,查询的速度肯定就会慢。

2. 当你只需要查询出一条数据的时候,要使用 limit 1

        比如你要查询数据中是否有男生,只要查询一条含有男生的记录就行了,后面不需要再查了,使用Limit 1 可以在找到一条数据后停止搜索。

3.   建立高性能的索引

        索引不是随便加的也不是索引越多越好,更不是所有索引对查询都有效。

4.   建数据库表时,给字段设置固定合适的大小

        字段不能设置的太大,设置太大就造成浪费,会使查询速度变慢。

5.   要尽量使用not null  

6.   EXPLAIN 你的 SELECT 查询  

        使用EXPLAIN,可以帮助你更了解MySQL是如何处理你的sql语句的,你可以查看到sql的执行计划,这样你就能更好的去了解你的sql语句的不足,然后优化语句。

7.   在Join表的时候,被用来Join的字段,应该是相同的类型的,且字段应该是被建过索引的。

        这样,MySQL内部会启动为你优化Join的SQL语句的机制。

8.   如果你有一个字段,比如“性别”,“国家”,“民族”, “省份”,“状态”或“部门”,这些字段的取值是有限而且固定的,那么,应该使用 ENUM 而不是 VARCHAR。 

        因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能

9.  垂直分割    

        将常用和有关系的字段放在相同的表中,把一张表的数据分成几张表,这样可以降低表的复杂度和字段的数目,从而达到优化的目的

10.  优化where查询

①、避免在where子句中对字段进行表达式操作

        比如:select 列 from 表 where age*2=36; 建议改成  select 列 from 表 where age=36/2;

②、应尽量避免在 where 子句中使用 !=或<> 操作符,否则将引擎放弃使用索引而进行全表扫描

③、应尽量避免在 where 子句中对字段进行 null 值 判断

④、应尽量避免在 where 子句中使用 or 来连接条件

11.   不建议使用%前缀模糊查询,这种查询会导致索引失效而进行全表扫描

        例如LIKE “%name”或者LIKE “%name%这两种都是不建议的。但是可以使用LIKE “name%”。

对于LIKE “%name%,可以使用全文索引的形式

12.  要慎用in和 not in

        例如:select id from t where num in(1,2,3)   建议改成 select id from t where num between 1 and 3

对于连续的数值,能用 between 就不要用 in 了。

13. 理解in和exists, not in和not exists的区别

        很多时候用 exists 代替 in 是一个好的选择:如查询语句使用了not in那么内外表都进行全表扫描,没用到索引,而not exists子查询依然能用到表上索引,所以无论哪个表大,用not exists都比not in要快。

select num from a where num in(select num from b) 建议改成: select num from a where exists(select 1 from b where num=a.num)

区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询。所以IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。

关于not in和not exists,推荐使用not exists,不仅仅是效率问题,not in可能存在逻辑问题。

14. 理解select Count (*)和Select Count(1)以及Select Count(column)区别

一般情况下,Select Count (*)和Select Count(1)两者返回结果是一样的;

假如表没有主键(Primary key), 那么count(1)比count(*)快;

如果有主键的话,那主键作为count的条件时候count(主键)最快;

如果你的表只有一个字段的话那count(*)就是最快的;

count(*) 跟 count(1) 的结果一样,都包括对NULL的统计,而count(column) 是不包括NULL的统计。

相关文章

  • SQL审核优化建议

    SQL审核优化建议 数据库类型 MySQL:RDS MySQL、PolarDB MySQL、MariaDB、Pol...

  • MySQL大数据量查询方法及优化

    看了一些关于MySQL查询的优化方法,发现MySQL的优化最离不开的就是索引,还有其他优化的小建议。 查询方法: ...

  • mysql优化建议

    1. 创建 每张表上的索引不应多于6个,索引越多在插入删除时越慢,而且索引会占用很大的磁盘空间。 尽量避免使用te...

  • mysql优化建议

    文章引自:https://www.douban.com/note/345871485/ 第一方面:30种mysql...

  • mysql优化建议

    1. 为查询缓存优化你的查询大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MyS...

  • mysql优化建议

    1sql中出现了过多的or时,建议是多个查询sql,用union all将结果集连接起来 2查询是否存在selec...

  • MySQL优化建议

    对于数据分析而言,可能需要经常从数据库中查询数据,那么怎样才能更优地获取数据库中的数据呢,这里简单介绍了几种MyS...

  • Mysql优化建议-网上资料

    背景 最近学习Mysql优化相关知识,弄到了一份文档,上面有相关的21条建议。 链接 Mysql优化英文文档 最后...

  • 程序员收藏必看系列:深度解析MySQL优化(二)

    程序员收藏必看系列:深度解析MySQL优化(一) 性能优化建议 下面会从3个不同方面给出一些优化建议。但请等等,还...

  • 后端开发需要了解的mysql优化方向

    优化思维导图 参数优化注意事项 参数优化分为 动态参数配置 和 配置文件的配置,建议在启动mysql之前配置好优化...

网友评论

    本文标题:MySQL优化建议

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