Mysql数据库如何优化?从哪几个方面考虑?

对Mysql数据库的优化三个方向主要分为:

    1.优化SQL语句

    2.优化数据库结构

    3.优化Mysql服务器

________________________________________________________________________________________

    一.优化SQL语句又分为以下几个方面:

【1】优化查询语句

1、通过Explain和Describe关键字分析select查询语句,从而使开发人员知道查询效率低的原因。

语法如下:explain  select * from bookmanager where Name='admin' \G;

2、通过添加索引进行优化

    说起数据库的性能,索引可能使最物美价廉的东西了。使用索引可以快速的定位表中的某条记录,不用添加内存、不用修改程序,也不用调用sql语句,只需执行一个创建正确的索引,查询速度就可能提高千倍万倍。

    索引并不一定是主键或者唯一的字段,如果表中的某个字段总是被搜索,就可以为其创建索引。

    创建索引的语句如下:

    create index index_name on table_name(manName);

    使用索引应注意的事项:

    (1)使用多列索引时,查询条件必须使用索引的第一个字符。

    (2)like关键字配置的字符串不能以符号“%”开头。

    (3)or关键字连接的所有条件都必须使用索引。如果or前后有一个条件的列不是索引,那么查询中讲不使用索引。

3、优化Order by

    有两种方式如下:

    (1)索引优化:对by后的列添加索引,从而大达到优化的目的。

    (2)where+order by 的组合优化:通过where进行限制后在进行order by

4、优化group by    (同3中通过加索引和where进行优化)

5、优化limit

6、优化子查询

    在mysql中通过使用连接查询来代替子查询,从而达到优化目的。原因:子查询在执行的时候 数据库需要位内层查询语句的查询结果建立一个临时表,然后外层语句查询临时表,所以子查询的效率比较低,而连接查询就不存在这个问题。

总结优化查询的基本原则如下:

    尽可能对每一条运行的sql语句进行Explain

    尽力少使用Join(少使用多表查询)

    尽量少排序

    尽量避免select * 查询

    尽量使用连接代替子查询

    尽量少使用or关键字

    尽量使用Union all代替union

    尽量早过滤

    避免“类型转换”

    优化先优化高并发的sql语句

    从全局出发优化,而不是片面调整

【2】优化其他执行语句

1、优化insert语句

    禁用索引,禁用唯一性检查,使用一条insert插入多条语句。

2、优化update语句

    使用一个update语句同时做多个更新。

3、优化delete语句

    删除一条记录的时间与索引的数量成正比。删除一个表的所有行,使用truncate table Tbname 而不要使用delete from table

二、优化数据库结构

1、优化字段类型

    数据库最耗时的就是IO处理,所以尽可能减少IO读写量。

    数字类型:尽量不要使用double类型,不仅是长度问题,还有精度问题。对于整数,数据量大时区分TinyInt、Int、BigInt,如果确定不实用负数,添加unsigned定义。

    字符类型:尽量不要使用text类型,性能低于char和varchar,定长使用char,不定长使用varchar

    时间类型:尽量不使用Timestamp,只精确到某一天的话,可用Date类型。

    Enum和Set:状态字段用enum,如果存放可预先定义的属性数据可以尝试用set

2、优化字符编码

3、适当进行拆分

4、适当增加冗余

5、优化数据库表

三、优化Mysql服务器

优化原则如下:

    内存中的数据要比磁盘上的数据访问的快。

    让数据尽可能长时间的留在内存里能减少磁盘读写活动的工作量。

    让索引信息留在内存里要比让数据记录的内容留在内存里更为重要。

猜你喜欢

转载自blog.csdn.net/qq_37465368/article/details/80872285
今日推荐