Sql 语句优化

sql语句优化

工作转眼一年多了,回头看看以前写的代码觉得有必要整合一下sql,提高些许性能,下面是总结的一些经验,经供参考


1.in ,or 比较

sql 1:SELECT * from file where file_type ="DCM" or file_type ="JSON"

Result: Time: 0.007s

sql 2:SELECT * from file where file_type in ("DCM" ,"JSON")

Result:Time: 0.010s
结论:差别不大

2.left join ,right join 比较

sql 1: select * from instance  left join series on series.pk=instance.series_pk
Result :Time: 0.024s
sql 2:select * from series  RIGHT JOIN instance on series.pk=instance.series_pk
Result : Time: 0.016s
sql 3:select * from series  left join instance on series.pk=instance.series_pk
Result : Time: 0.014s
sql 4:select * from instance RIGHT JOIN series on series.pk=instance.series_pk

结论: left join 小表在前,大表在后, right join 大表在前,小表在后。

3.exists ,in 比较

sql 1 :select * from instance where series_pk in(select pk FROM series where modality="CT")

Result :Time: 0.009s

sql 2 :select * from instance where  EXISTS(select pk FROM series where series_pk=series.pk and modality="CT")
Result : Time: 0.017s

结论:与网上Exists 效率比 in 高 不符合,实际情况,在环境下选择。

4.新建索引的条件

4.1 表的字段唯一约束

4.2 查询中与其它表关联的字段

4.3 查询中排序的字段

4.4 查询中统计或分组统计的字段

5.不应该新建索引的情况

5.1 表记录太少

5.2经常插入、删除、修改的表

5.3 数据重复且分布平均的表字段

5 .创建索引时需要注意的问题

5.1 最常用作限制条件的列放在最左边,依次递减。

5.2 索引不会包含有NULL值的列

5.3 适用短索引

5.4 排序的索引问题 --数据库默认排序可以符合要求的情况下不要使用排序操作,尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。

5.5 like语句操作

5.6 不要在列上进行运算

5.7 不使用NOT IN和操作

6.sql 注意事项

5.1 union并不绝对比or的执行效率高

select * FROM series where modality ="CT" or modality="MR"

Result:Time: 0.001s

sql 2:select * from series where modality ="DCM" UNION select * from series where modality ="MR"

Result:Time: 0.003s

sql 3:select * FROM series where modality ="CT" or study_pk=62

Result:Time: 0.001s

 sql 4: select * from series where modality ="DCM" UNION select * from series where study_pk=62

Result:Time: 0.001s
解决方法:同一字段用 or ,不同字段用 union
如果有网友有更好的解决或提高sql效率意见或者建议,请用邮箱联系.[email protected]

你可能感兴趣的:(sql)