2、项目中,优化mysql之前,首先要开启慢查询日志,在分析慢查询日志.
1,查看所有日志状态: show variables like ‘%quer%‘;
2,查看慢查询状态:show variables like ‘show%‘
linux启用MySQL慢查询
代码如下 vim /etc/my.cnf
[mysqld]
slow-query-log = on # 开启慢查询功能
slow_query_log_file = /usr/local/mysql/data/slow-query.log # 慢查询日志存放路径与名称
long_query_time = 5 # 查询时间超过5s的查询语句
log-queries-not-using-indexes = on # 列出没有使用索引的查询语句
Windows下开启MySQL慢查询
MySQL在Windows系统中的配置文件一般是是my.ini找到[mysqld]下面加上
补充:
在my.cnf或者my.ini中添加log-queries-not-using-indexes参数,表示记录下没有使用索引的查询。比如:
代码如下 log-slow-queries=/data/mysqldata/slowquery.log # 慢查询日志存放路径与名称
long_query_time=5 # 查询时间超过5s的查询语句
log-queries-not-using-indexes # 列出没有使用索引的查询语句
3.1 MySql内部函数explain(查询sql的执行计划)使用方法以及返回各列的含义 explain返回各列的含义 table:显示这一行的数据是关于哪张表的 type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index 和ALL possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。 key:实际使用的索引。如果为NULL,则没有使用索引。 keyjen:使用的索引的长度。在不损失精确性的情况下,长度越短越好 ref:显示索引的哪一列被使用了,如果可能的话,是一个常数 rows: MYSQL认为必须检查的用来返回请求数据的行数
实例1:mysql函数【max()】,最后一位注册用户的信息 进行查询操作,图一是没有加索引,图二是加了索引的,查询出来的type和rows字段也不相同。(参照上图字段段含义) 图一:
显然图三不是这个查询方法不是咱们想要的结果,图四和图五也一样,利用count()函数的特性null不统计,得到了我们想要的结果(图六)。 图三:
图四:
图五:
图六:
3.3 LIMIT 的优化(http://www.2cto.com/database/201306/222535.html) 实例5:使用LIMIT一般都伴随着ORDER BY(如图十一),如果是没有索引的字段排序的的话会按照文件排序,全表查询会加大对服务器IO的访问。 图十一:
优化方案一:使用主键进行排序,不会造成全表扫描,会减少对服务器IO的访问。但是还有一个问题,当所查询的条数越往后,所扫描的条数也会越多(如图十三) 图十二:
优化方案三:可以添加一个字段用于LIMIT查询,再加上索引,就和主键id产生同样的效果,但是这样会产生很多麻烦。 4 .1、如何选择合适的列建立索引
实例6:通过count函数统计唯一值,值大的离散度就大,也就是说u_pass的离散度比大u_name,所以应该使用index(u_pass,u_name)
注意:再次的强调SQL和索引的优化对于数据库的优化是相当重要的,这一层的优化如果做好了,其他的优化也能起到一些作用否则其他的优化所能起到的作用是微乎其微的,这一层的优化也是成本最低效果最好的一层了,所以对于数据库的优化最好重点放在这一层。 5、数据库结构优化 5.1选择合适的数据类型 数据类型的选择,重点在于合适二字,如何确定选择的数据类型是否合适? 1.使用可以存下你的数据的最小的数据类型。 2.使用简单的数据类型。Int要比varchar类型在mysql处理上简单。 3.尽可能的使用not null定义字段。 4.尽量少用text类型,非用不可时最好考虑分表。 实例:int、bigint、smallint 和 tinyint范围
使用整数数据的精确数字数据类型。 bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。 int 从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。 smallint 从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小为 2 个字节。 tinyint 从 0 到 255 的整型数据。存储大小为 1 字节。 注释 在支持整数值的地方支持 bigint 数据类型。但是,bigint 用于某些特殊的情况,当整数值超过 int 数据类型支持的范围时。 在数据类型优先次序表中,bigint 位于 smallmoney 和 int 之间。实例:时间使用int类型
当表的数据比较多的时候,可以选择将表进行水平拆分,水平拆分的本质并没有改变表的结构仅是将原本存放在同一个表中的数据放到了多个结构一样的表中。 水平拆分的方法:
mysql常用配置参数1
配置MySQL的配置文件使用工具更方便,主要就是调整配置的参数,值调整成什么样的参数才是合适的,估计需要补充各种基础知识不是三言两语说的清楚的。
就是将文本的配置方式变成了界面式的配置方式,不过经验在此时就非常的重要了,否则压根判断不出什么样的配置才是适合的配置!
7 服务器硬件优化
MySql数据库优化可以从哪几个方面进行?
标签:字段 不同 提高 article baidu 利用 设计 target 开启