mysql优化,sql语句优化,表优化
2013-12-22 22:20
295 查看
一、sql语句优化
1、优化insert语句
一次插入多值:insert into table_name values(1、2),(1、2),(1、2)....
使用文本文件装载一个表的数据:LOAD DATA INFILE 'C:/Users/907379/Desktop/table.txt' into TABLE asset character set utf8;(导出时采用文本文件)
2、优化group by语句
在使用group by时,后面加上order by null可以禁止结果排序,减少查询时间
可以使用 EXPLAIN SELECT * FROM `t_asset` GROUP BY LANGUAGE_CODE ORDER BY NULL;查看到Extra中不包含filesort
3、优化order by语句
对于order by后面接多个需要排序的字段,所有字段尽量都按相同的顺序排序,都是升序或都是降序
4、优化嵌套语句
如从table1查找table2中不存在的数据,一般的话我们会这样写:select * from table1 where tid not in(select tid from table2)
其实,这时可以用连接(join)来优化子查询:select * from table1 a left join table2 b on a.tid = b.tid where b.tid is null;
5、优化or条件,最好使用索引,并且每个or条件都必须用到索引,如果没有的话,可以考虑添加索引
6、使用sql提示
生成一个临时的结果集,减少表锁时间:select sql_buffer_results * from table1
使用use index希望mysql参考索引列表:select * from table1 use index (ind_id) where id=1
使用ignore index使mysql忽略一个或多个索引:select * from table1 ignore index (ind_id) where id=1
使用force index使mysql强制使用特定的索引,比如id>0默认mysql是扫描全盘:select * from table1 force index (ind_id) where id>0
二、表优化
1、优化表的数据类型
使用procedure analyse() 确认要优化的列:select * from table1 procedure analyse();结果中Optimal_fieldtype就是给出的优化建议
然后通过alter table table1 modify id INT(9) UNSIGNED NOT NULL (Optimal_fieldtype给出的建议)
2、通过拆分提高表的访问效率
a、垂直拆分:把主码和常用的列放到一个表,把主码和不常用的一些列放到一个表(不过会出现冗余列)
b、水平拆分:把一列或者多列的数据行放到两个独立的表中(比如近3个月的数据放到一个表,历史数据放到另外的表),不过会增加程序的复杂度,一般情况不建议使用
3、逆规范化
比如增加冗余列,增加派生列,重新组表,拆分表等提高性能,但需要通过批处理维护,应用逻辑和触发器(最好用的方法)来维护数据的完整性
4、使用中间表提高统计查询速度
使用中间复制源表部分数据,与源表相隔离,对源表不会有影响;中间表可以灵活增加临时用的字段,提高效率
1、优化insert语句
一次插入多值:insert into table_name values(1、2),(1、2),(1、2)....
使用文本文件装载一个表的数据:LOAD DATA INFILE 'C:/Users/907379/Desktop/table.txt' into TABLE asset character set utf8;(导出时采用文本文件)
2、优化group by语句
在使用group by时,后面加上order by null可以禁止结果排序,减少查询时间
可以使用 EXPLAIN SELECT * FROM `t_asset` GROUP BY LANGUAGE_CODE ORDER BY NULL;查看到Extra中不包含filesort
3、优化order by语句
对于order by后面接多个需要排序的字段,所有字段尽量都按相同的顺序排序,都是升序或都是降序
4、优化嵌套语句
如从table1查找table2中不存在的数据,一般的话我们会这样写:select * from table1 where tid not in(select tid from table2)
其实,这时可以用连接(join)来优化子查询:select * from table1 a left join table2 b on a.tid = b.tid where b.tid is null;
5、优化or条件,最好使用索引,并且每个or条件都必须用到索引,如果没有的话,可以考虑添加索引
6、使用sql提示
生成一个临时的结果集,减少表锁时间:select sql_buffer_results * from table1
使用use index希望mysql参考索引列表:select * from table1 use index (ind_id) where id=1
使用ignore index使mysql忽略一个或多个索引:select * from table1 ignore index (ind_id) where id=1
使用force index使mysql强制使用特定的索引,比如id>0默认mysql是扫描全盘:select * from table1 force index (ind_id) where id>0
二、表优化
1、优化表的数据类型
使用procedure analyse() 确认要优化的列:select * from table1 procedure analyse();结果中Optimal_fieldtype就是给出的优化建议
然后通过alter table table1 modify id INT(9) UNSIGNED NOT NULL (Optimal_fieldtype给出的建议)
2、通过拆分提高表的访问效率
a、垂直拆分:把主码和常用的列放到一个表,把主码和不常用的一些列放到一个表(不过会出现冗余列)
b、水平拆分:把一列或者多列的数据行放到两个独立的表中(比如近3个月的数据放到一个表,历史数据放到另外的表),不过会增加程序的复杂度,一般情况不建议使用
3、逆规范化
比如增加冗余列,增加派生列,重新组表,拆分表等提高性能,但需要通过批处理维护,应用逻辑和触发器(最好用的方法)来维护数据的完整性
4、使用中间表提高统计查询速度
使用中间复制源表部分数据,与源表相隔离,对源表不会有影响;中间表可以灵活增加临时用的字段,提高效率
相关文章推荐
- 浅谈MySQL中优化sql语句查询常用的30种方法
- 浅谈MySQL中优化sql语句查询常用的30种方法
- mysql 的优化(如何查询mysql中执行效率低的sql语句)
- MySQL5.6 如何优化慢查询的SQL语句 -- 慢日志介绍
- MySQL优化:使用慢查询日志定位效率较低的SQL语句
- SQL语句优化技术分析(适用于Orcale)【mysql未知】
- 【MySQL】10条SQL优化语句,让你的MySQL数据库跑得更快!
- 小贝_mysql sql语句优化过程
- mysql的sql语句优化
- MySQL中优化sql语句查询常用的30种方法
- 浅谈MySQL中优化sql语句查询常用的30种方法
- mysql中优化sql语句查询的30种方法
- MySQL5.6 如何优化慢查询的SQL语句 -- SQL优化
- Mysql常用30种SQL查询语句优化方法
- MySQL优化 之 用explain分析低效率的sql语句
- MYSQL的SQL语句优化
- mysql性能优化学习笔记(3)常见sql语句优化
- mysql中优化sql语句查询的30种方法(转)
- mysql5.7官网直译SQL语句优化--块式嵌套循环和批量key访问连接
- mysql优化sql语句查询的方法