博客列表 >如何优化MySQL查询

如何优化MySQL查询

Whitney的博客
Whitney的博客原创
2018年12月05日 11:25:303520浏览

一、数据表数据类型的优化

字段采用合适的数据类型

例如:

1、tinyint,smallint,bigint

正常情况下人的年龄可以使用tinyint数据类型存储。

2、char,varchar

两者的区分在于是否是定长(char属性会自动补齐不够的位)

可以使用char字段存储 md5加密后的字符串

IP地址的存储可以使用ip2long 函数处理后 存储为char类型,取出时long2ip

3、enum

可以使用enum字段存取特定固定的分类,效率更高。

二、索引的优化

1、在数据量庞大而且又有经常性的查询操作的时候可以采用增加索引的方式,提高查询效率,但是索引不是越多越好,在加索引时需注意,在在合适的字段上创建最合适的索引。

2、复合索引的前缀原则

    例:一个多列索引为 (col1 ,col2, col3)

    那么在索引在列 (col1) 、(col1 col2) 、(col1 col2 col3) 的搜索会有作用。

3、索引的失效情况(查询时应避免索引失效的情况)

① like查询时%的问题,例:若“A%”则索引有效,若“%A”则索引失效

② 查询时使用or条件,除非每个字段都加索引,否则索引失效

③ 采用isnull条件时,索引失效

④ 如果列的类型是字符串,那一定要在条件中将数据使用引号引用起来,否则索引失效

三、SQL语句的优化

1、使用连接(join)来代替子查询

2、尽量避免使用select *

3、变复杂为简单,切分查询(例如需要删除千万条数据,则可采用部分删除法)

4、使用union代替手动创建的临时表

5、在建有索引的字段上尽量不要使用函数进行操作(将会使索引不能发挥应有的作用)

四、存储引擎的优化

尽量使用InnoDB引擎

五、数据表结构的优化

1、分区操作:通过特定的策略来对数据表进行物理拆分

例:按地区分,按活跃程度分,根据id使用二分取模法分

2、分库分表

水平拆分:拆分活跃数据与非活跃数据,连接时用union

垂直拆分:拆分常用列与非常用列,连接时用join

六、数据库架构的优化

可以对数据库进行主从分离,读写分离,负载均衡操作。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议