MySQL操作的一些优化
1.用于不要使用select * from table xxx。
需要查询哪些列就在语句中指明,一个表结构复杂时,可能会有上百列,使用*来查询时会造成很大的浪费。
2.选择合适的属性及大小
例如邮政编码使用char(6)就要比varchar(255)合适的多,省份、性别定义为enum也会提高效率。
3.使用join来代替子查询
原因是MySQL将不用创建临时表来完成2步操作。
select name,age from a where id not in (select id from b);可以用下面的语句代替:
select name,age from a left join b on a.id = b.id where b.id is null;
4.有索引的字段不要使用函数,会使索引失效
select id,times from count where total /7<24;应该改为:
select id,times from count where total<24*7;
5.使用explain来判断语句的效率
6.最左原则,(a,b)做联合索引时,where a = ?时会使用索引,where b = ?时不会使用索引。
(a,b,c)做联合索引时,where a = ?and b = ?时会使用索引,where b = ?and c = ?时不会使用索引。
7.使用like时,开头不要使用%,否则索引会失效。应该使用like ‘abc%’而避免like ‘%abc%’。
8.MySQL的一些操作将会产生临时表,这些操作应该避免:
1>group by一个无索引的列,就会产生临时表
使用join时,group by任何列都会产生临时表,order by也是一样的
2>distinct非索引列会产生临时表
3>可以使用explain查看extra字段,如果是filesort就说明使用了临时表。说明MySQL已经无法通过索引来排序,需要额外的空间来排序。
9.向一张表插入若干条数据:
insert into table(column1,column2,column3) values(1,1,1),(2,2,2),...(n,n,n);
10.很多的语句一次执行,批处理,减少建立连接的次数
最新文章
- loadrunner目录分析
- paip.spring3 mvc servlet的配置以及使用最佳实践
- MySQL字符串类型转换时间类型
- 【制作镜像Win*】文件准备
- .net ajax式上传文件
- redis学习大全
- Java编程思想-注解生成外部例子代码
- Robotium源码分析之Instrumentation进阶-attach
- iOS获取用户设备崩溃日志并分析
- python 浅析IO 模型
- jmeter笔记(3)--响应结果中文乱码的解决方式
- OpenCV中 常用 函数 的作用
- Kubernetes 笔记 03 扫清概念
- Http协议中get和post的区别
- 分类统计的controller和service
- ida快捷键
- 牛客练习赛1 A - 矩阵
- Adobe Acrobat Pro 修改背景色
- ASP.NET Session原理及处理方法
- final static 修饰(转载)