业务上有一张表示对象分科目成绩的表,大概结构就是 主键自增 ID 、科目名,科目成绩,对象 ID 这四项,业务上搜索需要搜索,比如“搜索科目 1 成绩为 90,91,92,93,94,95 的所有对象 ID”
SQL 目前是按下面这样写的
SELECT objid FROM SCOTT.SCORES WHERE subject = 1 AND score IN (90,91,92,93,94,95)
但是遇到如果需要同时搜索不同科目的话,比如同时对科目 1 的成绩和科目 2 的成绩有要求,就需要拆成多个搜索语句,目前是这么写的
SELECT DISTINCT objid FROM (
SELECT objid FROM SCOTT.SCORES WHERE subject = 1 AND score IN (90,91,92,93,94,95)
UNION
SELECT objid FROM SCOTT.SCORES WHERE subject = 2 AND score IN (60,70,90)
UNION
SELECT objid FROM SCOTT.SCORES WHERE subject = 3 AND score IN (75,85)
) AS tmp
感觉非常麻烦,请问有什么放到一句话里的写法吗?
目前是在表里针对 subject 的值进行了分区,然后对 subject 和 score 建立了一个联合的普通索引,性能上还有能优化的地方吗?谢谢大家
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.