我得到了这个查询来优化POSTGRESQL 9.2:
SELECT C.name, COUNT(DISTINCT I.id) AS NumItems, COUNT(B.id)
FROM Categories C INNER JOIN Items I ON(C.id = I.category)
INNER JOIN Bids B ON (I.id = B.item_id)
GROUP BY C.name
Run Code Online (Sandbox Code Playgroud)
作为我学校作业的一部分.
我在各自的表上创建了这些索引:items(category)- >第二个b +树,bids(item_id)- >第二个b +树,categories(id)- >主索引在这里,
奇怪的是,PostgreSQL正在对我的Items,Categories和Bids表进行顺序扫描,当我设置时enable_seqscan=off,索引搜索比下面的结果更可怕.
当我在PostgreSQL中运行解释时,这就是结果:请不要删除它们,因为它们是重要的!
GroupAggregate (cost=119575.55..125576.11 rows=20 width=23) (actual time=6912.523..9459.431 rows=20 loops=1)
Buffers: shared hit=30 read=12306, temp read=6600 written=6598
-> Sort (cost=119575.55..121075.64 rows=600036 width=23) (actual time=6817.015..8031.285 rows=600036 loops=1)
Sort Key: c.name
Sort Method: external merge Disk: 20160kB …Run Code Online (Sandbox Code Playgroud) database postgresql join query-optimization postgresql-performance
我有这个看起来像的程序.
int indexLength;
char *args[1024];
while(args[indexLength])
indexLength++;
Run Code Online (Sandbox Code Playgroud)
如果我在计算机上运行程序,while循环行给了我一个段错误...而indexLength取一些荒谬的任意值.但是,如果我在家里的Linux机器上运行程序,没有段错误,我的程序正常运行.
我可以想到的两台机器之间的唯一区别是,工作中的那个有gcc4.7 redhat版本,并且正在运行Fedora OS,而我家的机器已经从ppa存储库下载了gcc4.7,并且正在运行ubuntu OS.但是,我不相信这是唯一的区别!它能是什么?
编辑:抱歉,我忘了提.如果我初始化indexLength = 0,则segfault在工作的计算机上消失了.