使用哪个索引
Which Index to use
我有两个经常使用的查询,所以索引是我真正应该使用的东西,在搜索所有索引之后我仍然无法决定哪个更适合以下查询:
select distinct F.nif, F.nome
from fornecedor F, produto P
where F.nif = P.forn_primario
and P.categoria = 'Frutos'
select ean, count(nif)
from produto P, fornece_sec F
where P.ean = F.ean
group by P.ean
因为第一个查询是多列的,所以我认为它应该是一个 B 树,但是在文档中他们又没有提到来自不同表的列。
对于此查询(注意:使用正确的现代语法编写):
select distinct F.nif, F.nome
from fornecedor F join
produto P
on F.nif = P.forn_primario
where P.categoria = 'Frutos';
您可能需要 produto(categoria, forn_primario)
和 fornecedor(nif, nome)
上的索引。我会质疑您是否真的需要 select distinct
,如果有更多信息,可能会建议使用另一个版本的查询。
对于此查询(注意:正确编写以避免语法错误):
select P.ean, count(F.nif)
from produto P join
fornece_sec F
on P.ean = F.ean
group by P.ean;
您希望每个 table 中的 ean
上有索引。我建议您使用 count(*)
而不是 count(nif)
,除非您特别想计算该列的非 NULL
值。
你这样做的方式,当你不确定时,你会在潜在的候选人身上测试它(希望在你的开发环境中)。所以你用 b-tree 创建它然后 运行
explain analyse select ...
并用你的结果制作一个矩阵
b-tree(select whatever) hash (select whatever)
time 0.0001 ms time 9999 ms
plan ... plan ...
这就是您准确了解所需的方式,因为我们不知道您的 table 的大小、色谱柱的选择性以及许多其他内容
虽然你的连接和谓词可能是 btree :)
我有两个经常使用的查询,所以索引是我真正应该使用的东西,在搜索所有索引之后我仍然无法决定哪个更适合以下查询:
select distinct F.nif, F.nome
from fornecedor F, produto P
where F.nif = P.forn_primario
and P.categoria = 'Frutos'
select ean, count(nif)
from produto P, fornece_sec F
where P.ean = F.ean
group by P.ean
因为第一个查询是多列的,所以我认为它应该是一个 B 树,但是在文档中他们又没有提到来自不同表的列。
对于此查询(注意:使用正确的现代语法编写):
select distinct F.nif, F.nome
from fornecedor F join
produto P
on F.nif = P.forn_primario
where P.categoria = 'Frutos';
您可能需要 produto(categoria, forn_primario)
和 fornecedor(nif, nome)
上的索引。我会质疑您是否真的需要 select distinct
,如果有更多信息,可能会建议使用另一个版本的查询。
对于此查询(注意:正确编写以避免语法错误):
select P.ean, count(F.nif)
from produto P join
fornece_sec F
on P.ean = F.ean
group by P.ean;
您希望每个 table 中的 ean
上有索引。我建议您使用 count(*)
而不是 count(nif)
,除非您特别想计算该列的非 NULL
值。
你这样做的方式,当你不确定时,你会在潜在的候选人身上测试它(希望在你的开发环境中)。所以你用 b-tree 创建它然后 运行
explain analyse select ...
并用你的结果制作一个矩阵
b-tree(select whatever) hash (select whatever)
time 0.0001 ms time 9999 ms
plan ... plan ...
这就是您准确了解所需的方式,因为我们不知道您的 table 的大小、色谱柱的选择性以及许多其他内容
虽然你的连接和谓词可能是 btree :)