mysql listen_MySQL性能优化

1、为查询缓存优化查询

大多数的MySQL服务器都开启了查询缓存,这是提高性能最有效的方法之一,而且这是被MySQL的数据库

引擎处理的。有些查询不会使用缓存,比如有curdate(),now(),Rand()或是其他的诸如此类的sql函数都不会开

启查询缓存,因为这些函数的返回是不定的异变的,无法进行缓存,可以用变量代替MySQL函数,通过传

参开启缓存。

2、EXPLAIN 查询语句

使用Explain关键字可以分析MySQL是如何处理sql语句的,可以帮助自己分析自己的查询语句或者表结构的

性能瓶颈。

EXPLAIN命令分析详解:参考

https://www.cnblogs.com/gomysql/p/3720123.html

63fdc5657a0473786b5477ba9314ee71.png

主要关注的列:id,select_type,type,rows,Extra

ID 包含一组数字,查看查询中执行select子句或操作表的顺序,查看优先级关系

select_type 查看每一个select子句的类型(是简单还是复杂)避免出现DEPENDENT SUBQUERY

子查询效率依赖外层查询

type 查看查询在表中找到所需行的方式,尽量避免全表扫描,使用索引或外键关联

rows查看select语句得到结果需要读取的行数,根据行数进行优化

Extra查看一些额外的信息,如不使用索引排序

3、当只要一行数据时使用Limit 1

当你查询表的有些时候,如果知道查询结果只会有一条,可以加上limit 1,当MySQL数据库引擎找到一条

数据后就会停止搜索,而不是继续往后查找下一条符合记录的数据

4、为搜索字段建立索引

索引并不一定就是给主键或是唯一的字段。对表中经常搜索的字段建立索引。

5、在join表的时候使用相当的类型,并将其索引。如通过外键关联,或在两张表中存储相同的字段数据。

6、避免select *

从数据库里读的数据越多,查询就会变得很慢,并且如果数据库服务器和web服务器是两台独立的服务器

的话,还会增加网络传输的负载。用字段名代替 * 。

7、反规范化设计,表的水平分割(以某一个条件列作为分割条件,如年份)

垂直分割(将一个表的列分到不同的表中)

表的合并

列的反规范化(通过列的复制完成,消除表间的多次连接)

8、拆分大的delete或者insert语句

这两个操作都会造成锁表,表如果锁住了其他操作就都进不来了。如果访问量很大,30秒的锁表有可能会

让web服务崩溃。如果有很大的处理,需要将其拆分,使用limit将其进行划分。

9、越小的列会越快,为表中字段选择合适的数据类型和大小,MySQL利用procedure analyse()函数优化表结构

它让Mysql去帮助自己分析字段和实际的数据,并给出一些建议,只有表中有实际数据,这些建议才有用。

只有数据越来越多时,这些建议才会变得准确。

10、应尽量避免在where子句中使用!=或<>、IS NULL或IS NOT NULL、IN ,NOT IN等操作符,否则引擎将

放弃使用索引而进行全表扫描。在in语句中能用exists语句代替的就用exists.

11、如果不考虑重复数据,使用Union All 代替union,如果没有all关键字,MySQL会给临时表加上distinct选项,

这会给临时表增加distinct选项,临时表的数据会做唯一性检查,代价非常高。同时使用UnionAll 不会进行

排序,对大表来说排序非常消耗时间。

12、尽量使用关联查询代替子查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值