集合的操作

/tmp/a.sh.html  1 集合的操作
 2 
 3 工作中经常会碰到数据集合的操作,诸如集合的交集、差集和并集等等。在集合只有少量的时候,如2个集合时,用shell工具我感觉比数据库更方便一些。
 4 比如:
 5 集合a:
 6 1
 7 2
 8 3
 9 4
10 5
11 集合b:
12 1
13 2
14 5
15 7
16 交集的操作:a∩b,cat a b | sort | uniq -u
17 差集的操作:a-b,cat a b b | sort | uniq -u
18 并集的操作:a∪b,cat a b | sort | uniq。
19 用数据库操作也可以,可以用到left join等等。
20 
21 但是在多个集合需要执行这样的操作时,用shell就显得不够方便了。
22 比如集合a,b,c,d,e等5个集合,需要填写下面这样的一张表:
23 +------+------+------+------+-------+------+
24 | 交集 |  a   |   b  |  c   |   d   |   e  |
25 +------+------+------+------+-------+------+
26 |   a  |      |      |      |       |      |
27 +------+------+------+------+-------+------+
28 |   b  |      |      |      |       |      |
29 +------+------+------+------+-------+------+
30 |   c  |      |      |      |       |      |
31 +------+------+------+------+-------+------+
32 |   d  |      |      |      |       |      |
33 +------+------+------+------+-------+------+
34 |   e  |      |      |      |       |      |
35 +------+------+------+------+-------+------+
36 
37 可以在数据库中创建两张张表
38 status(id int primary key, a boolean default 0, b boolean default 0, c boolean default 0, d boolean default 0, e boolean default 0);
39 ids(id int);
40 
41 执行以下脚本:
42 for in a b c d e
43 do
44     echo "
45     truncate table ids;
46     load data infile '$f' into table ids;
47     insert into status select id,1 from ids on duplicate key update $f=1;
48     " | mysql
49 done
50 
51 脚本执行完成之后,后面的工作就简单了,此处略去N个字。。。
52 
53 这样可以避免不同的表之间多次join带来的开销,特别是在数据量较大的时候可以极大的提高性能。

posted on 2011-06-23 18:19  andrefun  阅读(286)  评论(0)    收藏  举报

导航