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效率意见或者建议,请用邮箱联系.www.codemanzz@163.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值