我有一个learners大约有 320 万行的表。该表包含用户相关信息,例如姓名和电子邮件。我需要优化一些在某些列上使用 order by 的查询。因此,为了进行测试,我创建了一个temp_learners包含 80 万行的表。我在此表上创建了两个索引:
CREATE UNIQUE INDEX "temp_learners_companyId_userId_idx"
ON temp_learners ("companyId" ASC, "userId" ASC, "learnerUserName" ASC, "learnerEmailId" ASC);
Run Code Online (Sandbox Code Playgroud)
和
CREATE INDEX temp_learners_company_name_email_index
ON temp_learners ("companyId", "learnerUserName", "learnerEmailId");
Run Code Online (Sandbox Code Playgroud)
第二个索引仅用于测试。现在当我运行这个查询时:
SELECT *
FROM temp_learners
WHERE "companyId" = 909666665757230431 AND "userId" IN (
4990609084216745771,
4990610022492247987,
4990609742667096366,
4990609476136523663,
5451985767018841230,
5451985767078553638,
5270390122102920730,
4763688819142650938,
5056979692501246449,
5279569274741647114,
5031660827132289520,
4862889373349389098,
5299864070077160421,
4740222596778406913,
5320170488686569878,
5270367618320474818,
5320170488587895729,
5228888485293847415,
4778050469432720821,
5270392314970177842,
4849087862439244546,
5270392117430427860,
5270351184072717902,
5330263074228870897,
4763688829301614114,
4763684609695916489,
5270390232949727716
) ORDER BY "learnerUserName","learnerEmailId";
Run Code Online (Sandbox Code Playgroud)
db使用的查询计划是这样的: …