设为首页 加入收藏

TOP

MySQL性能优化(二)(六)
2015-07-24 11:08:14 来源: 作者: 【 】 浏览:3
Tags:MySQL 性能 优化
件中装载一个表时,使用load data infile,这个通常比使用很多insert语句要快20倍。 插入的时候可以:insert into t1(name) values ("user1"),("user2"),("user3"),("user4"); --程序逻辑里面插入的时候尽量批量插入,要不插一次链接、关闭一次MySQL 五:优化group by语句: 如果查询包含group by但用户想要避免排序结果的损耗,则可以使用 order by null来禁止排序: 如下没有使用order by null来禁止排序 explain select id,sum(moneys) from table_Name group by id \G --默认是升序排序,desc sql 看下 Extra:using temporary:using filesort 如下使用order by null来禁止排序(作用:最低的消耗资源) explain select id,sum(moneys) from table_Name group by id order by null\G --desc sql 看下 Extra:using temporary 六:优化嵌套查询(表都建立啦索引的前提下) 下面是采用嵌套查询的效果(可以使用更有效的链接查询(join)替代) 嵌套查询(效率极低,多表的话只会用到一张表的索引) --里面的能用到索引外面的用不到索引 explain select * from table_Name1 where company_id not in(select id from table_Name2)\G --desc sql看下你会发现如果2张表都建立索引,你会发现改嵌套查询table_Name2会用到索引查询,table_Name1不会 替代(都使用到索引) explain select * from table_Name1 left join table_Name2 on table_Name1.company_id=table_Name2.id where table_Name1.company_id is not null\G 链接查询优秀嵌套查询(上面): desc select * t1.* from t1,t2 where t1.id=t2.uid \G --这个sql 2张表在查询的时候都会用到索引 左右链接查询也会同时用到索引: desc select t1.* from t1 left join t2 on t1.id=t2.uid where t2.uid is not null \G =============================================================================================================================== 4.MySQL数据库优化(主要针对表) 一:优化表的类型 只能考认为的去对表结构进行优化 二:通过拆分提高表的访问效率 大存储量解决:1:分库分表 2:分区 主要目的:1:减少表的记录数 2:减少对操作系统的负担压力 三:使用中间表提高统计查询速度 中间表生成:1:view视图 2:重新生成一个新表 比如:有个存储帖子的表,能后我只是取前3条的热门贴,如果用select * from tiezi where id<4; 会全表扫描,性能低 1:就是建立视图(推荐使用视图) create view zj_view as select * from tiezi where id<4; --查询的时候直接查视图表 2:就是建立个表(不灵活) create table zj like tizi; insert into zj select * from tiezi where id<4; --将数据插入到zj表,查询的时候查这个表即可 =============================================================================================================================== 5.Myisam表锁 一:myisam读锁定(所有人只有读权限不能进行增删改) 1:lock table t1 read 2:开启另一个MySQL链接端,接着去尝试:select * from t1; 3: 再insert、update 和 delete t1这张表,你会发现所有的执行的sql都停留在终端上没有真正的去操作执行,直到解锁为止自动就执行 4:读锁定对我们在多备份大量数据时非常有用 mysqldump -uroot -p123456 test>test.sql 解锁:unlock tables; 二:myisam写锁定(只有本人进行增删改查,其他人不能进行任何操作) 1:lock table t1 write 2: 打开另一个mysql终端,尝试select、insert、update 、delete 这个表t1,你会发现都不能操作, 都会停留在终端上,只有等一个终端操作完毕,解锁后第二个终端才能真正执行 3:可见表的写锁比读锁更严格 4:一般情况下我们很少尝试的取对表进行read、write锁定的,myisam会自动进行锁定的 解锁:unlock tables; --全部解锁 =============================================================================================================================== 6.MySQL服务器优化 一:四种字符集问题(尽量统一设置utf8) sql: \s 查看 服务器字符集:server characterset: utf8 数据库字符集:Db characterset:utf8 客户端字符集:client characterset:utf8 链接字符集:conn. characterset:utf8 怎么设置字符集:mysql配置文件中找到: [client] default-character-set = utf8 --控制 客户端字符集 和 链接字符集 [mysqld] character-set-server = utf8 --控制服务器的字符集和数据库字符集 以及继承下来的表字符集 collation-server = utf8_general_ci --控制校验字符集(用途:比如 order by来排序,数据库这么知道这么排序就是靠这个) 能后重启mysql: pkill mysqld --杀死进程 pstree |grep mysqld --看mysql进程还在不在 /mysql/bin/mysqld_safe --user=mysql & 重启 !ps --查看进程 查看校验字符集: show character set; --一堆校验字符集 二:binary log 日志问题 查看bin log日志: show variables like "%bin%"; --看log_bin 是否开启 ON表示开启,;inux默认是开启的 开启log-bin日志: 配置文件中打开:log-bin=mysql-bin 三:slow log 慢查询日志问题 查看慢查询是否开启: show variables like "%slow%"; --看slow_query_log 是否开启 --慢查询日志保存地址 slow_query_log_file -> E:\wamp\bin\mysql\mysql5.5.20\data\asus-PC-slow.log show variables like "%long%"; --查看慢查询时间10s,long_query_time
首页 上一页 3 4 5 6 下一页 尾页 6/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇JDBC对MySQL数据库存储过程的调用 下一篇mysql基本总结

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·用 Python 进行数据 (2025-12-25 15:49:09)
·如何学习Python数据 (2025-12-25 15:49:07)
·利用Python进行数据 (2025-12-25 15:49:04)
·Java 学习线路图是怎 (2025-12-25 15:19:15)
·关于 Java 学习,有 (2025-12-25 15:19:12)