Mysql优化策略


以下是以Windows系统下实践为例:

一、造假数据,模拟场景

1.制造数据的存储过程:

DELIMITER//

CREATEPROCEDUREp1(numint)

BEGIN

DECLAREvINT;

SETv=1;

WHILEv<=numDO

INSERTINTOuser(username,password,gender,age,createtime)VALUES(concat("user",v),md5(v),round(rand()),round(rand()*100),now());

SETv=v+1;

ENDWHILE;

END;//

2.调用存储过程

选择数据库test1,创建表user,建表语句如下:

DROPTABLEIFEXISTS`user`;

CREATETABLE`user`(

`id`int(11)NOTNULLAUTO_INCREMENT,

`username`varchar(20)NOTNULL,

`age`tinyint(3)NOTNULL,

`password`char(32)NOTNULL,

`gender`enum('0','1')DEFAULTNULL,

`createtime`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,

PRIMARYKEY(`id`)

)ENGINE=MyISAMDEFAULTCHARSET=utf8;

调用存储过程:callp1(1000000);

3.分析user表结构

二、慢查询日志的开启

1.命令行下查看mysql慢查询的配置信息:

showvariableslike'%slow%';

2.slow_query_logOFF,则需要我们开启慢查询日志

开启方法:修改my.ini文件,在文件最后加上以下内容:

slow_query_log=on(开启慢查询日志)

long_query_time=0.2(设置慢查询时间为0.2秒)

3.开启之后可通过命令查看慢查询配置

showvariableslike'%slow%';

showvariableslike'%long%';

三、分析sql语句,验证索引带来的查询速度的提升

1.执行一条慢查询sql语句

select*fromuserwhereusername=‘user999990’;

记录下该语句的执行时间,若超过了我们设置的慢查询时间,则会记录在日志里。

2.分析慢查询的sql语句

explainselect*fromuserwhereusername=‘user999990’;

3.为username添加普通索引

altertableuseraddindex(username);

查看:showindexfromuser;

4.再次执行刚才的查询语句

select*fromuserwhereusername=‘user999990’;

记录本次查询所用的时间,验证是否加上索引加快了查询速度。

四、索引并非建的越多越好

索引的代价:

磁盘占用

对dml(updatedeleteinsert)语句的效率影响

验证加上索引之后的更新语句执行时间:

updateusersetusername=’a’whereid=1000010;

记录执行时间

将索引删除再次执行该sql语句,记录执行时间,比较有无索引时更新语句哪个更快。

五.sql语句使用到索引的情况

1.较频繁的作为查询条件字段应该创建索引

2.唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件

3.更新非常频繁的字段不适合创建索引

4.不会出现在WHERE子句中字段不该创建索

5.对于使用like的查询,查询如果是’%aaa’不会使用到索引’aaa%’会使用到索引。

6.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来。否则不使用索引。(添加时,字符串必须’’)

六、sql语句优化

1.避免使用select*

2.连接()代替子查询

3.如果想要在含有or的查询语句中利用索引,则or之间的每个条件列都必须用到索引,如果没有索引,则应该考虑增加索引

七、数据表的优化

MyISAM:如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性要求不是很高。其优势是访问的速度快。(尤其适合论坛的帖子表)

InnoDB:提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM,写的处理效率差一些并且会占用更多的磁盘空间。

Memory[一些访问频繁,变化频繁,又没有必要入库的数据:比如用户在线状态]

选择合适的数据类型

分库分表

对标进行水平垂直划分:

数据库的读写分离

优质内容筛选与推荐>>
1、常用的命令
2、对基础班的总结
3、Windows Phone 7 的 “界面设计与交互指南”
4、python基础——认识(if __name__ == ‘__main__’:)
5、6. 查看进程状态


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号