0%

ERP开发总结

ERP开发总结

前言

通过本周的开发学到了很多技术和业务上的知识,这周最大的收获,是一次在执行SQL查询的过程中,我发现不过是几千条的数据,却用了10多秒的处理时间,就在想能不能有什么办法对自己写的sql语句进行优化,之后我在网上查找了许多资料,将自己开发常用的几条优化方法分享出来。

1.避免在where子句中对字段进行null值判断和进行表达式操作

比如

1
select id from duser  WHERE id*100=200;

这样对字段进行算术运算,会造成引擎放弃使用索引,可以改成

1
select  id from user  WHERE id=200/100;

2.尽量避免使用or,会导致数据库引擎放弃索引进行全表扫描

1
SELECT * FROM t WHERE id = 1 OR id = 3

可以用union代替or

1
2
3
4
5
SELECT * FROM t WHERE id = 1

UNION

SELECT * FROM t WHERE id = 3

(PS:如果or两边的字段是同一个,如例子中这样。貌似两种方式效率差不多,即使union扫描的是索引,or扫描的是全表)

3.少用in 或 not in

对于连续的数值范围查询尽量使用BETWEEN AND,例如:

1
select name from duser where id BETWEEN 10 AND 100

4.使用 EXPLAIN 关键字可以让你知道MySQL是如何处理你的SQL语句的。这可以帮你分析你的查询语句或是表结构的性能瓶颈。

EXPLAIN 的查询结果还会告诉你你的索引主键被如何利用的,你的数据表是如何被搜索和排序,比如,要确定一个查询是否是覆盖索引,我们只需要explain sql语句看Extra的结果是否是“Using index”即可。

以duser表举例,可以对name字段查询试一下

1
2
3
explain select * from duser where name='姚福泉'; //查询的name无法从索引数据获取

explain select name from duser where name='姚福泉'; //可以直接从索引获取

alt

alt

正在加载今日诗词....