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

来源:互联网 发布:机器人运动算法 编辑:程序博客网 时间:2024/05/16 04:48

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

一、一些原则

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

  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


* 没有试过

0 0