PostgreSQL 8.0.0 �����ĵ���PostgreSQL �й� ������ | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 31. ��չ SQL | Fast Forward | Next |
PostgreSQL �IJ��������������������ѡ���Ӿ䣬 ��Щ�Ӿ����ϵͳһЩ���ڸò����������Ե�������Ϣ�� �ڿ��ܵ�����£����Ƕ�Ӧ���ṩ��Щ�Ӿ䣬 ��Ϊ���ǿ���Ϊʹ������������IJ�ѯ�����ɹ۵��ٶ������� ����Ҫע���������������Щ�Ӿ䣬�����ȷ����������ȷ�ģ� ���Ż��Ӿ�Ĵ���ʹ�ý����·������ı����� С����������������������顣��������Щ���鲻ȷ���Ļ��� ��������Ǻ����Ż��Ӿ䣻Ψһ�ĺ���Dz�ѯ���ܱ���Ҫ�����е���һЩ��
���ӵ��Ż��Ӿ�����ڽ��� PostgreSQL�汾����֡� ���������Ķ��ǰ汾 8.0.0 �������ġ�
����ṩ�� COMMUTATOR�Ӿ䣬������һ���������DZ�����IJ������Ľ������� ���������������A��B�������κο��ܵ�������ֵ x��y ���� A��B�������κο��ܵ�������ֵ���� (x A y) ���� (y B x)����ô���Ǿ�˵ A �� B �Ľ������� ͬ�� B Ҳ�� A �Ľ������� ���磬������ < �� > ������ʹ�õ�һ������������ͨ�����ǶԷ��Ľ������� �������� '+' ͨ����������Ľ����������Dz����� '-' ͨ��û�н�������
һ��������IJ�������������������Ľ��������Ҳ�����������ͬ����֮��Ȼ�� ���� PostgreSQL����Ҫ��ֻ��һ�����������������������Բ��Ҹý������� ��Ҳ��COMMUTATOR �Ӿ�������Ҫ��Ψһ�Ķ�����
����Щ���������������Ӿ�����ʹ�õIJ������ṩ�������Ƿdz��ؼ��ģ� ��Ϊ�����������ѯ�Ż���"�ƶ�"�������Ӿ䣬�γ�����Ҫ�IJ�ͬ�Ĺ滮���͵���ʽ�� ���磬����һ�������� tab1.x = tab2.y �� WHERE �Ӿ�IJ�ѯ�� ���� tab1.x �� tab2.y ���û��������ͣ����Ҽ��� tab2.y ������������ �����Ż���֪������� tab2.y = tab1.x ��Χ�Ĵ��ƶ����Ӿ䣬 ������������������ɨ�裬��Ϊ����ɨ������������������ֶ��ڸ����IJ���������ߡ� PostgreSQL�����ؼ�������һ���Ϸ���ת�� — = �Ĵ����߱�������������Ч�ģ������Ǹ������������ǽ�������Ϣ��
���㶨��һ���Ի���IJ�����ʱ���㶨���������ˡ� ���㶨��һ�Խ�����������ʱ���������һ�㼬�֣� ��������һ���������Ľ�����ָ����һ���㻹û�ж���IJ������أ� ���Ƕ�����������������������
һ��������ʡ���㶨��ĵ�һ����������COMMUTATOR�Ӿ䣬 Ȼ���ڵڶ����������Ķ������ṩһ�� (COMMUTATOR�Ӿ�)����Ϊ PostgreSQL ֪������������dzɶԳ��ֵģ� ���Ե��������ڶ�������ʱ�����Զ��ۻز�����һ���������ȱ��COMMUTATOR�Ӿ䡣
��һ����ֱ�ӵķ������������������涼����COMMUTATOR�Ӿ䡣�� PostgreSQL �����һ�����岢��ʶ�� COMMUTAOTR ָ��һ�������ڵIJ������� ϵͳ����ϵͳ������Ϊ�ò�������¼һ������ļ�¼�� �������ļ�¼ֻ�в�������������Ҳ����������Լ������������Ч�ģ� ��Ϊ��Щ�ǵ�ĿǰΪֹ PostgreSQL �����Ƶ������Ķ�������һ�����������¼������������¼���ӡ� �Ժ��㶨��ڶ���������ʱ��ϵͳ�������Եڶ�������������Ϣ���¸������¼�� �������ͼ����������������֮ǰʹ������ �㽫ֻ���յ�һ��������Ϣ��
����ṩ��NEGATOR�Ӿ䣬������һ���������DZ�����IJ������ķ��� ��������������ز��������IJ����� A �� B�����κο��ܵ����� x �� y�� ���� (x A y) ���� NOT (x B y)����ô����˵ A �� B �ķ��� ��Ȼ B Ҳ�� A �ķ������磬< �� >= �Դ��������������һ�Է��� һ�������������������������Ч��������
��������һ�Ե�Ŀ���������Ի�Ϊ��Ч�ķ��� �Ǿ���ζ�Ŷ������е� x��(A x) ���� NOT (B x)���������Ƶ���Ŀ�����������������
һ���������ķ���������������IJ���������һ�������/���Ҳ������� ���Ծ���COMMUTATORһ����ֻ�в���������Ҫ��NEGATOR�Ӿ����������
�ṩ���Բ�ѯ�Ż����Ƿdz��а����ģ� ��Ϊ������������NOT (x = y)�����ı��ʽ�� x <> y��������������������ҪƵ���Ķ࣬ ��ΪNOT������Ϊ�����������ж������롣
���Կ��������滻������н��͵���ͬ�ķ��������塣
����ṩ��RESTRICT�Ӿ䣬��Ϊ����������һ��ѡ�������Ƽ��㺯�� ��ע��������һ����������������һ�������������� RESTRICT�Ӿ�ֻ�ǶԷ���boolean������˫Ŀ�����������塣 ѡ�������Ƽ�����ĸ����Dz²�һ�����������е��� һ���ֶ���Ŀǰ�IJ��������ض��ij���������һ��������������ʽ�� WHERE �����Ӿ�
column OP constant
�����Ը����������͵�WHERE�Ӿ����ɾ�������е�һ����� �⽫�����Ż��������Ż���������ܻ�˵�� ����ó�����constant���������ô�죿Ŷ������COMMUTATOR �ɵ���...��
��д�µ�ѡ�������Ƽ��㺯��ԶԶ�����˱��µķ�Χ�� ���������˵��ǣ�ͨ������Լ��IJ�����ֻ��Ҫʹ��ϵͳ���ļ�����֮һ�����ˡ�������һЩ�����Ƽ�������
eqsel for = |
neqsel for <> |
scalarltsel for < or <= |
scalargtsel for > or >= |
����ܳ�ϰ���ڰ�eqsel����neqsel ������Щ�dz����߷dz���ѡ���ԵIJ���������ʹ���Dz���������Ȼ��߲���ȡ����磬 ���β�����Լ���ھ�ʹ��eqsel�����ǻ��������ļ��裺 ����ֻ��ƥ���������е�һС���ּ�¼��
�����scalarltsel��scalargtsel ���ڱȽ���ЩΪ���з�Χ�Ƚϱ�ת��Ϊ���ֳ߶Ⱥ�������������������͡� ������ܣ��Ѹ������������ӵ����Ա��ļ� src/backend/utils/adt/selfuncs.c��ĺ��� convert_to_scalar() ���IJ��֡������գ�������̽����ŵ���pg_type �����һ���б�ʶ��ÿ������һ���ĺ������棬����Ŀǰ��û����ô������ �����û������Щ��ϵͳ��Ȼ�ܹ����������Ż����Ĺ��Ʋ������������ô�á�
��src/backend/utils/adt/geo_selfuncs.c �ﻹ��Ϊ���β�������ƵĶ����ѡ��������������areasel�� positionsel�� ��contsel������д��Щ��ʱ�����Ƕ�ֻ�Ǵ���� �����㻹�ǿ���ʹ�ã����߸��õ��ǣ��������ǣ����ǡ�
����ṩ��JOIN�Ӿ䣬 ��Ϊ����������һ������ѡ���Ժ�������ע�������Ǻ����������Dz����������� JOIN�Ӿ�ֻ�ǶԷ���boolean��˫Ŀ�����������塣 һ������ѡ���Լ���������ĸ����Dz²�һ�Ա��ϵ���һ���� �ж�Ŀǰ�IJ�����������������ʽ��WHERE�Ӿ������
table1.field1 OP table2.field2
��RESTRICT�Ӿ�һ���� ��Щ���п��ܰ����Ż��������ٵĴ�������Ҫ��ȡ���ܵ�����˳���е���һ����
��ǰ��һ�������ڲ�����ͼ���������дһ������ѡ���Լ����������� ���ǻὨ��������һ�����õ�����£�ʹ��һ�����ļ�������
eqjoinsel for = |
neqjoinsel for <> |
scalarltjoinsel for < or <= |
scalargtjoinsel for > or >= |
areajoinsel for 2D area-based comparisons |
positionjoinsel for 2D position-based comparisons |
contjoinsel for 2D containment-based comparisons |
���������HASHES�Ӿ䣬 �����ϵͳ����һ�����ڴ˲����������ӿ���ʹ�ù�ϣ��ɢ�У����ӡ� HASHESֻ�Է���boolean��˫Ŀ�����������壬 ����ʵ���ϸò���������Ƕ�ij���������͵���Ȳ�������
��ϣ��ɢ�У����ӵļ����ǣ� ����һ�Թ�ϣ��ɢ�У���ͬ���Ĺ�ϣ��ɢ�У����������Ҳ�����ֵ�������Ӳ�����ֻ�ܷ����档 �������ֵ���ŵ���ͬ�Ĺ�ϣͰ� ���ӽ��������Ƚ����ǣ���������ζ�����Ӳ������Ľ��һ���Ǽ١� ���Զ��ڲ�������ȵIJ�����������HASHES��û������ġ�
ʵ���ϣ�����Ȼ������ã��ò���������Ǵ�����ȫ�İ�λ��ȣ� ��Ϊ��ϣ�������Ը�ֵ���ڴ������ʽ���м����������Щλ�ĺ�����ʲô�� ���磬����β����� ~=�����������������Ƿ���ȣ� ���Ͳ��ǰ�λ��ȵģ���Ϊ��ʹ��������εĶ���������˳��ͬ�� ����Ҳ������Ϊ��������ȵġ� �����ζ�Ŷ���һ���� ~= �ڶԱ�����֮������ӣ� ����ù�ϣ����ʵ�ֽ�����ñ������ʵ�����ɲ�ͬ�Ľ���� ��Ϊ����ƥ��Ĵ����ݶԽ�����ϣ�ɲ�ͬ��ֵ������ᱻ��ϣ���ӽ��бȽϡ� ��������Ż���ѡ��ʹ�ò�ͬ�����ӷ����� ��ô����~=������˵��ȵ����ݶԶ��ᱻ�ҳ��������Dz���������ֲ�һ���ԣ� ��������û�б��~=Ϊ�ɹ�ϣ�ġ�
ͬʱ����һЩӲ����ص����ػᵼ��һ����ϣ���ӵļ������ ���磬����������������һ���ṹ���ṹ������в�����ע������λ�� ��ʱ������ȺŲ��������ΪHASHESҲ�Dz���ȫ�ġ� ����������д���������������ȷ����Щδ�õ�λ�����㡣�������ǽ���IJ��ԡ��� ��һ�������Ǹ����������ͶԹ�ϣ����Ҳ�Dz���ȫ�ġ� �ڷ���IEEE������Ļ����ϣ�����������Dz�ͬ��ֵ����ͬ��λģʽ���� �������DZ�����Ϊ�Ƚ���ȡ����ԣ��������Ⱥű����ΪHASHES�� һ�������һ��������ܲ�����ϣ����ƥ�䣬�������������Ӵ��� ����Ӧ����ƥ��ġ�
�����ǣ� �����ֻ�ܰ�HASHES�����ã�������ã�memcmp() ʵ�ֵĵȺŲ�������
ע��: ��һ�� hashjoinable ����ɢ�����ӣ��IJ������²�ĺ������� ���Ϊ immutable �����õģ����� stable���ȶ��ģ���������� volatile����ʧ�ģ�����ôϵͳ ���Ӳ�����Щ��������ɢ�������С�
ע��: ���һ�� hashjoinable ����ɢ�����ӣ���һ���²㺯�����Ϊ�ϸ�ģ�strict���� ��ô�ú�������������Ҳ����˵�������κη� NULL ���룬��Ӧ�÷��� TRUE ���� FALSE���������� NULL�� �������ѭ�������IN ������ɢ���Ż����ܻ����ɴ���Ľ���� ���ر��ǣ����ݹ淶����ȷ�Ĵ𰸿����� NULL ��ʱ��IN ���ܻ᷵�� FALSE�� ��������������һ������Թ˵���� NULL ���û��˼��������
���������SORT�Ӿ䣬 �����ϵͳ�Ի���Ŀǰ�IJ���������ʹ���ں����ӷ����� MERGESֻ�ǶԷ��� boolean ��˫Ŀ�����������壬 ʵ�����������������ijЩ�������ͻ���ij���������ͱ����ʾ��ȡ�
�ں��������������ĸ���Ϊ�����ģ� ����ߺ��ұߵı��������Ȼ���е�ɨ�����ǡ����ԣ������������Ͷ��������ܹ���ȫ����ģ� �������Ӳ���������ֻ����Щ��������˳���е�"ij��λ��"����ֵ�Գɹ��� ʵ��������ζ�����Ӳ�����������ֵ�����ڡ� ���Ǻ�ϣ���Ӳ�ͬ����ϣ��������ߺ��ұߵ����������������ͬ�ģ������ǰ�λ��ȣ��� ���Զ����ֲ�ͬ�������ͽ����ں����� -- ֻҪ��������ȼ��ɡ� ���磬smallint��integer����Ȳ������ǿ������ں����ӵġ� ����ֻ��Ҫ�������������������г����ɱȵ����е�������������ɡ�
�ں����ӵ�ִ��Ҫ��ϵͳ���Ա�ʶ�������ں���������Բ�������صIJ������� �������ֱ߲������������͵�С�ڱȽϣ��������ֱ߲������������͵�С�ڱȽϣ� ��������������֮���С�ڱȽϣ��Լ���������������֮��Ĵ��ڱȽϡ� ����������ں����ӵIJ�������������ͬ�IJ������������ͣ���ô����ʵ���������ֲ�ͬ�IJ������� �������������������ͬ����ô����С�ڲ�����������ͬ�IJ��������� ���ǿ���ͨ���������������Щ���������ֱ��� SORT1�� SORT2��LTCMP���Լ� GTCMP ѡ� ����������� MERGES ��ͬʱȴʡ�������е��κ�һ���� ��ôϵͳ�����ȱʡ������ <��<��<�� >��ͬ������������ֲ�����ѡ���е��κγ��֣� ��ô������MERGES Ϊ�����ģ� ������ǿ���ֻ��������һ���ֲ�����Ȼ����ϵͳ��������ġ�
���ֱȽϲ������IJ��������Ϳ��Դӿ��ں����ӵIJ������IJ����������ɳ����� ��ˣ��� COMMUTATOR һ��������ֻ��Ҫ����Щ�Ӿ��и������������� ������ʹ�����ض�ѡȡ�IJ�����������ôдһ�� MERGES Ȼ����ϵͳ���ϸ�ھ��㹻�ˡ����� COMMUTATOR �Լ� NEGATOR һ�������������������������ǰ����������Բ���������ôϵͳ��������α��������¼����
����һЩ������Ϊ���ں����ӵIJ������ĸ������ơ� ��Щ����Ŀǰû�б�CREATE OPERATOR��飬 �����������֮һ��Ϊ��Ļ����ں����ӻ�������ʱʧ�ܣ�
���ں����ӵ���Ȳ�����������һ�������� �������������������������ͬ���������������ͬ����һ����ص���Ȳ���������
�����һ�ֿ��ں����ӵIJ������������������� A �� B ��أ� ��������һ�����ں����ӵIJ������� B ������������������� C ��أ���ô A �� C Ҳһ����һ�ֿ��ں����ӵIJ����������仰��˵�� һ�����ںϵIJ����������ǿɴ��ݵġ�
����������������ֲ�����������ȫ������ֵ������ô������ʱ�ͻᷢ���dz�����Ľ����
ע��: ��һ�����ں����ӣ�mergejoinable���IJ������²�ĺ���������Ϊ���ã�immutable�������ȶ���stable���� ���������ʧ�ģ���ôϵͳ���Ӳ�ʹ�����������ں����ӡ�
ע��: GROUP BY �� DISTINCT ����Ҫ��ÿ����������߱Ƚϵ��������Ͷ���һ�����ں����ӵ�����Բ����������� =�� ����Բ����������Ĺ��� SORT1 ����������ʵ����Щ������ ͬ������ص� SORT1 �������� ORDER BY ��ȱʡ�����������
ע��: ע�⣬�� PostgreSQL �汾 7.3 ��ǰ�� ��д MERGES �������ڣ�Ҫдһ�����ں����ӵIJ������� ���DZ�����ȷд�� SORT1 �� SORT2��ͬ���� LTCMP �� GTCMP ѡ������ڣ� ��Щ�������ֱ�д����Ӳ���� < �� >��