SQL连接查询保障效率的简易原则

连接查询是数据库操作中很常用的操作,也是最耗费资源的操作。提高连接查询的效率,对于整体的效率提高有很大的意义。实际使用发现连接操作确实需要做一些优化。

一、一些原则

看了一些网友的经验后,总结一下:

  1. 使用子查询减少连接的两张表的字段、记录数量。
  2. 建立视图,减少需要处理的字段、记录数量。
  3. 用于连接的字段建立索引。
  4. 连接方式优先选择内连接,外连接尽量不使用。
  5. 尽可能将记录少的表放在连接的左边,以减少先处理的记录数量。*

二、一些实践

需求,查询表1中的字段A和表2中字段B匹配的合并后的所有记录。
方案一:
select wwz.cpa,wwz.epa,family.memberan,family.adate from family,wwz where wwz.[PN]=family.[pnraw] group by memberan

运行很慢,难以接受。因此,按照我的需求,选择了第2、3项进行了优化。

首先创建视图:

create view main_pn_cpa_epa as select cpa,epa,pn from wwz;
create view family_an_date_pnr as select memberan,adate,pnraw from family;

再建立索引:

create index index_main_pn ON wwz(PN);

create index index_family_pnr ON family(pnraw);

在此基础上可以使用:

方案二:

select cpa,epa,memberan,adate from main_pn_cpa_epa,family_an_date_pnr where main_pn_cpa_epa.[PN]=family_an_date_pnr.[pnraw];

方案三:

select cpa,epa,memberan,adate from main_pn_cpa_epa inner join family_an_date_pnr on( main_pn_cpa_epa.[PN]=family_an_date_pnr.[pnraw]);

测试
  • 硬件环境:
    • 处理器:Intel(R) Core(TM) i3 CPU  M330  @ 2.13GHz 双核
    • 内存:4.00 GB
  • 软件环境:
    • Python2.7 
    • Sqlite3
  • 源表容量:
    • 表1:10442记录,37字段
    • 表2:8654记录,7字段
  • 100次查询,并且取出
耗时对比
方案一方案二方案三
1000min+15.21s15.59 s


* 没有试过

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值