用于过滤和阻止filesort

时间:2015-11-22 01:51:58

标签: mysql angularjs node.js postgresql

我正在构建一个角度测验应用程序,其中nodejs mysql作为后端。测验问题表包含id,title,choice_a,choice_b..choice_d,subject_id fk,topic_id fk,rand1,rand2,rand3

等字段

顺序是id asc,id desc,rand1 asc,rand1 desc,rand2 asc,rand2 desc,rand3 asc,rand3 desc等随机化顺序

rand字段包含随机分配的1到20个值,以提供随机测验

我的问题是针对下面给出的查询

    SELECT question.*,subject.title as subject_title,region.title as region_title,topic.title as topic_title FROM question LEFT JOIN subject ON
   (question.subject_id = subject.id) LEFT JOIN region ON (question.region_id = region.id) LEFT JOIN topic ON (question.topic_id = 
   topic.id) WHERE ((question.subject_id = '4')) ORDER BY rand1 DESC LIMIT 20

这里使用rand1(随机分配)过滤结果。现在我想知道为(subject_id,rand1)添加组合索引是否有帮助?

如果是,那么我将不得不为(subject_id,rand1)添加组合索引 (subject_id,RAND 2) (subject_id,rand3)  (subject_id,ID) 因为它们是常用的过滤+订购组合吗?

在这种情况下使用postgresql而不是mysql有帮助吗?

复合索引中的最大字段数是多少?

1 个答案:

答案 0 :(得分:0)

我已经找到了答案。通过创建不同的复合索引,我能够将每秒节点服务器的请求增加到两倍以上。复合索引很多,可以精确地优化频繁查询。通过在添加索引之前和之后对查询进行基准测试,我能够进行最优化。 谢谢大家......