11.7. ��������

����������partial index�� �ǽ�����һ������Ӽ��ϵ������� ���Ӽ�����һ���������ʽ����ģ���������������ν������ ������ֻ����������Щ�������ν�ʵ��С�

������������Ҫ������Ϊ�˱������ͨ��ֵ���������� ��Ϊ���һ����һ����ͨ��ֵ������ռ���������г��������ٷֵ����ֵ���ϵIJ�ѯ����ʹ�������� ��ô��û���������б�����Щ����ͨ���еı�Ҫ�� �����Ϳ��Լ�С�����ijߴ磬�����Ϳ��������Щ����ʹ�������IJ�ѯ���ٶȡ� ͬʱ��Ҳ�����������²������ٶȣ���Ϊ���������������Ҫ���������� Example 11-1 ��ʾ��һ��DZ�ڵ��ⷽ��Ӧ�õ����ӡ�

Example 11-1. ����һ�������������ų���ͨ��ֵ

��������һ�����ݿ��д洢 web �������ķ�����־�� ����������Ǵ������֯�ڲ��� IP ��ַ��Χ����ģ� ��Ҳ��һС�������������ط���������Щͨ�����Ž������ӵĹ�Ա���� �������������Ҫ�������ⲿ���ʵ� IP����ô����ܾͲ���Ҫ����Щ��Ӧ�����֯�������� IP ��Χ����������

�����������������

CREATE TABLE access_log (
    url varchar,
    client_ip inet,
    ...
);

Ҫ�����������ǵ����ӵ�������ʹ�������������������

CREATE INDEX access_log_client_ip_ix ON access_log (client_ip)
    WHERE NOT (client_ip > inet '192.168.100.0' AND client_ip < inet '192.168.100.255');

һ������ʹ����������ĵ��͵IJ�ѯ��������

SELECT * FROM access_log WHERE url = '/index.html' AND client_ip = inet '212.78.10.32';

һ������ʹ����������IJ�ѯ�����ǡ�

SELECT * FROM access_log WHERE client_ip = inet '192.168.100.23';

����ͨ���۲���Կ������������͵IJ�������Ҫ����ͨ��ֵ�ǿ���Ԥ�Ƶġ� �����ֵ�ķֲ��ǹ��еģ�����Ӧ����������ʣ������Ǿ�̬�ģ�����ʱ����ı䣩�� ��������һ�㣨������ͨ��ֵ���������ѣ����������ͨ��ֵֻ����Ϊһ�µ�����װ�أ� ��ô�����ܾ�Ҫ���ܶ�ά���Թ�����

����һ�������ǰ���Щ���͵IJ�ѯ����������Ȥ����ֵ�ų��� ����֮�⣻��������� Example 11-2 ����ʾ�� ���������������г���ͬ�����ŵ㣬��������ȫ�ܾ���ͨ������ ����"������Ȥ"����ֵ����ʹ����ɨ����ܶ���Щ���� Ҳ��������Ȼ��Ϊ����������ò���������Ҫ�dz���ϸ�Լ���Ҫ�������顣

Example 11-2. ����һ�������������ų�������Ȥ����ֵ

�������һ���������Ѹ����δ����Ķ�������δ����Ķ���ֻռ�ܱ��һС���ֲ������Ǿ���ʹ�õIJ��֣� ��ô�����ͨ��ֻ��δ������ϴ���һ���������������ܡ����������������������������

CREATE INDEX orders_unbilled_index ON orders (order_nr)
    WHERE billed is not true;

�����õ���������IJ�ѯ��������

SELECT * FROM orders WHERE billed is not true AND order_nr < 10000;

������������Ҳ����������Щ��ȫ���漰 order_nr �IJ�ѯ�����磬

SELECT * FROM orders WHERE billed is not true AND amount > 5000.00;

�����ѯ������ amount �ֶ��ϵIJ���������ô��Ч�� ��Ϊϵͳ����ɨ���������������ǣ����δ����Ķ�����Խ��٣� ��ô��������������ҳ�δ����Ķ����������Щ��

��ע�����������ѯ�޷�ʹ�����������

SELECT * FROM orders WHERE order_nr = 3501;

���� 3501 �������Ѹ���Ҳ������δ���

Example 11-2 ��˵���˽����������ֶκ���ν����ʹ�õ��ֶβ������䡣 PostgreSQL ֧�ִ�����ν�ʵIJ���������ֻҪ��ֻ�漰����������ֶξ��С� ����������Ҫ��ס����ν�ʱ������Щϣ���Ӹ������л���IJ�ѯ�е�������ƥ�䡣 ׼ȷ˵��ֻ����ϵͳ�ܹ�ʶ����ò�ѯ��WHERE��������ѧ���̺��˸�������ν��ʱ�� ������������������ڸò�ѯ�� PostgreSQL ��û�и��ӵ�����У������ʶ����Щ��ʽ��ͬ����ѧ����ȵ�ν�ʡ� ��������������У�������dz����ѣ�������ʵ��ʹ����Ҳ���ܷdz������� ϵͳ����ʶ��򵥵IJ�����̺������� "x < 1" �̺� "x < 2"�� ����ν����������׼ȷƥ���ѯ��WHERE������Ҫ��Ȼϵͳ���޷�ʶ��������ǿ��õġ�

���������ĵ����ֿ�����;��ȫ��Ҫ�������ڲ�ѯ�еõ�ʹ�á� ����ĸ�������һ�����һ���Ӽ��ﴴ��һ��Ψһ������ �� Example 11-3 �������� ������ǿ��������ν�ʵ����е�Ψһ�ԣ�������Լ����Щ����ҪΨһ���С�

Example 11-3. ����һ������Ψһ����

����������һ��������������ı�����ϣ��ȷ����һ����Ŀ��Ϳ���������ֻ��һ��"�ɹ�"��¼�� ���ǿ���������������"���ɹ�"��¼��������ʵ�ַ�����

CREATE TABLE tests (
    subject text,
    target text,
    success boolean,
    ...
);

CREATE UNIQUE INDEX tests_success_constraint ON tests (subject, target)
    WHERE success;

���ֻ�������ɹ����Զ��кܶ಻�ɹ����ԣ���ô����һ�ַdz���Ч��ʵ�ַ�����

��󣬲�������Ҳ�������ڸ���ϵͳѡ��IJ�ѯ�滮�� ���ܻ���������������������ݼ��ķֲ��DZȽ��ض�����״�� ��ô�ᵼ��ϵͳ�ڲ���ʹ��������ʱ��ʹ����������������£� ���ǿ��԰���������Ϊ��Υ��(����)�IJ�ѯ�в����á� ͨ�� PostgreSQL ��������ʹ���ǻ��������ѡ��ģ����磬���ڼ�����ͨ��ֵ��ʱ�����ʹ������ ���ǰ�������ʵ����ֻ�ǽ�Լ�������ijߴ磬������Ҫ�����������ʹ�ã��� ����������˴���Ĺ滮ѡ����ô���ύһ�����汨�档

���סһ���¡�����һ������������ʾ�����ٺͲ�ѯ�滮��֪����һ���࣬ �ر�����֪��ʲô��������������Ч�ġ�Ҫ�γ���Щֻ��Ҫ���о��鲢����� PostgreSQL �����������������ġ� �ڴ��������£�������������ͨ���������Ʋ���̫���ԡ�

�����йز�����������Ϣ������ ����������ʵ���� Partial indexing in POSTGRES: research project���� Generalized Partial Indexes ��á�