Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Je me demandais c koi la solution la plus optimale?
est ce d'opter à chaque fois à l'appel de deux fonctions chacune scanne une table et rende un résultalt, ou bien faire une jointure entre les deux table avec toutes les conditions et rendre un seul résultat????
Hors ligne
Je ne vois pas ce qu'on peut répondre d'autres que : ça dépend. Avec un peu plus de détails, il serait plus facile d'émettre un avis éclairé. À priori, utiliser des fonctions n'est pas un gain de perfs... mais bon, tout dépend du cas.
Guillaume.
Hors ligne
create OR replace FUNCTION mape_get_ip(inet) RETURNS integer
AS $$
DECLARE
addr ALIAS for $1;
ipid integer;
BEGIN
select into ipid ip from ips where ips.ip= addr;
return ipid;
end;$$
LANGUAGE plpgsql;
--------------------------------------------------------------------------------------
create OR replace FUNCTION mape_get_peer(inet,integer) RETURNS integer
AS $$
DECLARE
addr ALIAS FOR $1;
port ALIAS FOR $2;
ipid integer;
peerid integer;
BEGIN
-- Get the ID corresponding to the address
select into ipid mape_get_ip(addr);
IF ipid >= 1
then
select into peerid id FROM peers WHERE peers.ip = addr AND peers.port = port;
return peerid;
else
return 0;
end IF;
end;$$
LANGUAGE plpgsql;
----------------------------------------------------------------------------------------
select into peerid mape_get_peer(p_addr,p_port);
ou bien
create or replace FUNCTION mape_get_peer(inet,integer) RETURNS integer
AS $$
DECLARE
addr ALIAS for $1;
port ALIAS for $2;
--ipid integer;
peerid integer;
BEGIN
select into peerid id from peers, ips
where peers.ip = ips.ip and peers.id = ips.id and peers.ip = addr and peers.port = port;
if peerid > 0
return peerid;
else
return 0;
end IF;
end;$$
LANGUAGE plpgsql;
Hors ligne
Très clairement la jointure sera gagnante.
Guillaume.
Hors ligne
Merci
Hors ligne
Pages : 1