�䤤��碌����ǽ��¿�����װ��˱ƶ�����ޤ��� �桼��������Ǥ����Τ⤢��ޤ������ظ�ˤ��륷���ƥ��߷פ˵������뺬��Ū���װ��⤢��ޤ��� �ܾϤǤ�PostgreSQL����ǽ���������塼�˥��뤿��Υҥ�Ȥ����ޤ���
PostgreSQL��Ϳ����줿�䤤��碌�����䤤��碌�ײ�����Ф��ޤ��� �䤤��碌�ι�¤�ȴޤޤ��ǡ�����������Ŭ�����������䤤��碌�ײ�����뤳�Ȥ��ɤ���ǽ�����뤿������˽��פˤʤ�ޤ��� EXPLAIN���ޥ�ɤ�Ȥ��С�Ǥ�դ��䤤��碌���Ф��ƥ����ƥब�ɤΤ褦���䤤��碌�ײ���ä��Τ��狼��ޤ��� �䤤��碌�ײ���ɤߤ��ʤ����ȤˤĤ��Ƥϡ����ӹ��ϰϤˤ錄����塼�ȥꥢ�����ʤ���Фʤ�ʤ��ۤɤ��Ӥ�ɬ�פǤ��� ����ʸ��Ϥ����ޤǥ��С����ޤ�������Ū�ʾ�����Ĥ����ޤ���
���ߤΤȤ���EXPLAIN�����Ϥ�����ͤˤϰʲ��Τ�Τ�����ޤ���
��������ο��ꥳ����(�����ѤΥ�������Ϥ����ޤǤ˾������֡��㤨��SORT�Ρ��ɤǼ¹Ԥ���륽���Ƚ����λ���)��
���Το��ꥳ����(��̤ι����Τ���Ф������Υ����ȡ��ȤϤ��äƤ⡢LIMIT���Ȥä��䤤��碌�ξ��ϡ����ΤΥ����ȷ���������ߤ��ޤ�)��
���ηײ�Ρ��ɤ����Ϥ���Ԥο����(����⡢�¹Ԥ���λ�������Τߡ�)
���ηײ�Ρ��ɤ����Ϥ���Ԥ�(�Х���ñ�̤Ǥ�)����ʿ������
�����Ȥϡ����Ф��ǥ������ڡ���ñ�̤�¬�ꤵ��ޤ��� (CPU����ô�˴ؤ��Ƥο���ϡ�Ŭ�������Ū�˷����ˤ������äƥǥ������ڡ���ñ�̤Ǵ�������ޤ��� �����δ���ͤθ��̤��Τꤿ�����ϡ���16.4.5.2�μ¹Ի�����ѥ����ΰ����Ȥ��Ƥ���������)
��̥Ρ��ɤΥ����Ȥˤϡ����ƤλҥΡ��ɤΥ����Ȥ⤽����˴ޤޤ�Ƥ��뤳�Ȥ˽�ʬα�դ��Ƥ��������� ���Υ����Ȥϥץ��ʤ䥪�ץƥ��ޥ�������Ϳ���륳���ȤΤ�ȿ�Ǥ�������ޤ����פǤ��� �Ȥ�櫓����̤ιԤ�ե���ȥ���ɤ�ž�����륳���Ȥϡ��ºݤν������֤���Ⱦ�������ǽ��������ˤ�ؤ�餺����θ����ޤ��� �ץ��ʤϡ��ײ�����ѹ����褦�ȡ��ɤ����뤳�Ȥ�Ǥ��ʤ����ᡢ�����̵�뤷�ޤ��� (�������ײ�Ϥɤ�ʤ�ΤǤ��졢����Ʊ���Ԥ��̤Ȥ��ƽ��Ϥ���ȿ����Ƥ��ޤ���)
���ϹԿ����䤤��碌�ˤ�äƽ������뤤�ϥ�����줿�Կ���ɽ�������ʤ��Τ���¿�������ˤ����ʤäƤ��ޤ��� �����Ρ��ɤ�Ŭ�Ѥ�������Ƥ�WHERE��������������������ͤ�ȿ�Ǥ����̾�λ����⾯�ʤ��Կ��ˤʤ�ޤ��� ����Ū�ˤϡ��Ǿ�̤ιԿ��ο����ͤϡ��ºݤ��䤤��碌�ˤ�ä��֤��졢�������졢���뤤�Ϻ�����줿�����ιԿ��Ȥʤ�ޤ���
�����Ĥ�����ޤ� (VACUUM ANALYZE�������regression test�ǡ����١�����ȤäƤ��ޤ������Ѥ�����������7.3��ȯ�ǤǤ�)��
EXPLAIN SELECT * FROM tenk1; QUERY PLAN ------------------------------------------------------------- Seq Scan on tenk1 (cost=0.00..333.00 rows=10000 width=148)
����ϤۤȤ�ɸ����ޤޤǤ����⤷��
SELECT * FROM pg_class WHERE relname = 'tenk1';
��¹Ԥ���ȡ�tenk1�ˤ�233�Υǥ������ڡ�����10000�ιԤ����뤳�Ȥ��狼��ޤ��� �Ǥ����顢ñ�̤�����1.0�ȥ����Ȥ���ޤäƤ���233�ڡ������ɤ߽Ф��ˡ�����0.01�����ꤵ��Ƥ���cpu_tuple_cost��10000�ܤ�����Τ�ä�����Τ��������Ȥο����ͤˤʤ�櫓�Ǥ�����SHOW cpu_tuple_cost���ƤߤƤ�����������
�Ǥϡ�WHERE����ä����䤤��碌���ѹ����Ƥߤޤ���
EXPLAIN SELECT * FROM tenk1 WHERE unique1 < 1000; QUERY PLAN ------------------------------------------------------------ Seq Scan on tenk1 (cost=0.00..358.00 rows=1033 width=148) Filter: (unique1 < 1000)
WHERE�礬���뤿�ᡢ���ϹԿ��θ��Ѥ꤬�������ʤäƤ��ޤ��� �������������Ȥ���10000�����Ƥ����ɬ�פ����뤿�ᡢ�����ȤϾ������ʤäƤ��ޤ��� �ºݤˤϡ�WHERE�������뤿���CPU���֤�;�פˤ����뤳�Ȥ�ȿ�Ǥ��ơ��ۤ�ξ����Ǥ��������Ȥ��徺���Ƥ��ޤ���
�����䤤��碌������ºݤιԿ���1000�Ǥ��� ������������ϳ����ͤˤ����ޤ��� ���μ¸������¹Ԥ�����硢�����餯¿���ۤʤ�����ͤ�����Ǥ��礦�� ��äȤ����ȡ������ANALYZE���ޥ�ɤ�Ԥ��٤��Ѳ����ޤ��� �ʤ��ʤ顢ANALYZE�����������������ϡ��ơ��֥�Υ������ɸ�ܤ�����Ф���뤫��Ǥ���
�Ǥϡ������䤤��碌���ѹ����������궯�����¤��Ƥߤޤ���
EXPLAIN SELECT * FROM tenk1 WHERE unique1 < 50; QUERY PLAN ------------------------------------------------------------------------------- Index Scan using tenk1_unique1 on tenk1 (cost=0.00..179.33 rows=49 width=148) Index Cond: (unique1 < 50)
WHERE�������������ʬ�˹���ȡ��ץ��ʤϥ�������륹�������⥤��ǥå���������²��Ǥ���ȷ��ꤹ��褦�ˤʤ뤳�Ȥ�ʬ����ޤ��� ���ηײ�Ǥϡ�����ǥå��������뤿��ˤ��ä�50�Ԥ����˥�����������Ф褤���Ȥˤʤ�ޤ��� �Ǥ����顢�ǥ������ڡ������Τ��༡�ɤߤȤ���⡢����ǥå����ˤ��ġ��μ��Ф��Ϲ���ˤĤ��ˤ�ؤ�餺�����ηײ褬���Ѥ���ޤ���
WHERE���˶��⤦1���ɲä��ޤ���
EXPLAIN SELECT * FROM tenk1 WHERE unique1 < 50 AND stringu1 = 'xxx'; QUERY PLAN ------------------------------------------------------------------------------- Index Scan using tenk1_unique1 on tenk1 (cost=0.00..179.45 rows=1 width=148) Index Cond: (unique1 < 50) Filter: (stringu1 = 'xxx'::name)
�ɲä�����stringu1 = 'xxx'�ˤ����ϹԿ��ο����ͤϸ��������ΤΡ���������Ԥν�����Ѥ��ʤ�����˥����Ȥϸ��äƤ��ޤ��� ����stringu1��ϡ�����ǥå������Ȥ��Ƥ�Ŭ�ѤǤ��ʤ����Ȥ����դ��Ƥ������� (���Υ���ǥå����ϡ�unique1��Τߤ��оݤȤ��Ƥ��뤫��Ǥ�)�� �������ꡢstringu1��ϡ�����ǥå����ˤ�ä���Ф��줿�ԤΥե��륿�Ȥ���Ŭ�Ѥ���Ƥ��ޤ��� ����ˤ�ꡢ�ɲ�ʬ�Υ����å���ȿ�Ǥ��뤿�ᡢ�����ȤϼºݤˤϾ����夬��ޤ���
���ޤ������˻ȤäƤ����ե�����ɤ�Ȥä�2�ĤΥơ��֥���礷�Ƥߤޤ��礦��
EXPLAIN SELECT * FROM tenk1 t1, tenk2 t2 WHERE t1.unique1 < 50 AND t1.unique2 = t2.unique2; QUERY PLAN ---------------------------------------------------------------------------- Nested Loop (cost=0.00..327.02 rows=49 width=296) -> Index Scan using tenk1_unique1 on tenk1 t1 (cost=0.00..179.33 rows=49 width=148) Index Cond: (unique1 < 50) -> Index Scan using tenk2_unique2 on tenk2 t2 (cost=0.00..3.01 rows=1 width=148) Index Cond: ("outer".unique2 = t2.unique2)
��������Ҿ��롼���Ǥϡ������������ˡ��Ǹ����Ǽ������Τ�Ʊ������ǥå���������Ȥ��Ƥ��ޤ��� �����ơ�unique1 < 50 WHERE������Ρ��ɤ�Ŭ�Ѥ��Ƥ��뤿�ᡢ�����ȤȽ��ϹԿ����Ѥ�äƤ��ޤ��� �����ʳ��Ǥ�t1.unique2 = t2.unique2��ϴط����Ƥ��餺�������������ˤ�������ϹԿ��˱ƶ����Ƥ��ޤ��� �����������Ǥϡ������������ˤ����븽�ߤιԤ�unique2���ͤ������Υ���ǥå������������ꤲ���ޤ졢t2.unique2 = constant�Τ褦�ʥ���ǥå��������������ޤ��� ���äơ������������ηײ�ȥ����Ȥϡ��㤨��EXPLAIN SELECT * FROM tenk2 WHERE unique2 = 42�Τ褦���䤤��碌��Ʊ���Ǥ��� �롼�ץΡ��ɤΥ����Ȥϡ������������Υ����Ȥȡ��ơ��γ����ιԤ��Ф�����������������֤���뤳�Ȥˤ�륳���ȡʤ����Ǥ�49 * 3.01�ˤ�ä������˷�������Ԥ�����ξ�����CPU���֤�ä�����Τˤʤ�ޤ���
������Ǥϡ����ν��ϹԿ���2�ĤΥ������ν��ϹԿ����Ѥ��������ʤäƤ��ޤ��������Ĥ⤽���ʤ�櫓�ǤϤ���ޤ��� �����Ƥ��ξ�硢2�ĤΥơ��֥�˴ط�����WHERE�礬���äơ�����WHERE������ϥ��������ǤϤʤ�������Ԥ��ݤ�Ŭ�Ѥ���뤫��Ǥ��� �㤨�С�WHERE ... AND t1.hundred < t2.hundred�Ȥ�������ɲä����Ȥ���ȡ����Ρ��ɤν��ϹԿ��餷�Ϥ��ޤ��������ϥ������ˤϱƶ����ޤ���
���䤤��碌�ײ�μ�����Ф���enable/disable�ե饰����Ѥ��ơ��ץ��ʤ��Ǥ��ɤ��ȹͤ��Ƥ�����ά����Ū��̵�뤵������ˡ�ˤ�ꡢ�ۤʤä��ײ��ѻ����뤳�Ȥ��Ǥ��ޤ��� �����˸���Ū�ʥġ���Ǥ��������Ѳ��ͤ�����ޤ��� ��13.3�⻲�Ȥ���������)
SET enable_nestloop = off; EXPLAIN SELECT * FROM tenk1 t1, tenk2 t2 WHERE t1.unique1 < 50 AND t1.unique2 = t2.unique2; QUERY PLAN -------------------------------------------------------------------------- Hash Join (cost=179.45..563.06 rows=49 width=296) Hash Cond: ("outer".unique2 = "inner".unique2) -> Seq Scan on tenk2 t2 (cost=0.00..333.00 rows=10000 width=148) -> Hash (cost=179.33..179.33 rows=49 width=148) -> Index Scan using tenk1_unique1 on tenk1 t1 (cost=0.00..179.33 rows=49 width=148) Index Cond: (unique1 < 50)
���ηײ�Ǥϡ�����ǥå�����������Ȥä�tenk1����ɬ�פ�50�Ԥ���Ф��ƥ����Υϥå���ơ��֥�˳�Ǽ�������θ塢tenk2������륹����ơ�tenk2�ι����t1.unique2 = t2.unique2�����������ɤ����ϥå���ơ��֥�����ޤ��� tenk1���ɤ�ꡢ�ϥå���ơ��֥�����ꤹ�뤿��Υ����Ȥϡ�tenk2���ɤ���Ϥ��ޤǹԤ����ꤷ�ޤ���Τǡ������˥ϥå�����ν�������ȤȤʤ�ޤ��� �ޤ������η��ο��������֤ˤϡ��ϥå���ơ��֥��10000�����롢�礭��CPU���֤��ޤޤ�Ƥ��ޤ��� �����������ηײ跿�Ǥϥϥå���ơ��֥������ϰ��٤ΤߤΤ��ᡢ10000x179.33ʬ�Υ����Ȥ�������ʤ����Ȥ����դ��Ƥ���������
EXPLAIN ANALYZE����Ѥ��ơ��ץ��ʤ����ꤹ�륳���Ȥ����٤��������뤳�Ȥ��Ǥ��ޤ��� ���Υ��ޥ�ɤϼºݤˤ����䤤��碌��¹Ԥ����ײ�Ρ�������פ����ºݤμ¹Ի��֤����̤�EXPLAIN���������ꥳ���Ȥ�Ʊ���ͤȰ���ɽ�����ޤ��� �㤨�С��ʲ��Τ褦�ʷ�̤����뤳�Ȥ��Ǥ��ޤ���
EXPLAIN ANALYZE SELECT * FROM tenk1 t1, tenk2 t2 WHERE t1.unique1 < 50 AND t1.unique2 = t2.unique2; QUERY PLAN ------------------------------------------------------------------------------- Nested Loop (cost=0.00..327.02 rows=49 width=296) (actual time=1.181..29.822 rows=50 loops=1) -> Index Scan using tenk1_unique1 on tenk1 t1 (cost=0.00..179.33 rows=49 width=148) (actual time=0.630..8.917 rows=50 loops=1) Index Cond: (unique1 < 50) -> Index Scan using tenk2_unique2 on tenk2 t2 (cost=0.00..3.01 rows=1 width=148) (actual time=0.295..0.324 rows=1 loops=50) Index Cond: ("outer".unique2 = t2.unique2) Total runtime: 31.604 ms
"actual time"�ͤϼ»��֤�ߥ���ñ�̤�ɽ����Ƥ��뤳�ȡ�"cost"�����ͤϥǥ������ɤ��˴ؤ��벿�餫��ñ�̤�ɽ����Ƥ��뤳�Ȥ����դ��Ƥ��������� �Ǥ����餽�Τޤ���Ӥ��뤳�ȤϤǤ��ޤ��� ���ܤ������Ϥ��γ��Ǥ���
�䤤��碌�ײ����ˤϡ���������ײ�Ρ��ɤ�¹ԤǤ����Τ�����ޤ��� �㤨�С���Ҥ�����Ҿ��롼�פηײ�Ǥϡ���������ǥå����������ϳ����ι���˰��ٹԤ��ޤ��� ���Τ褦�ʾ�硢"loops"�ͤϤ��ΥΡ��ɤ�¹Ԥ������������𤷡�ɽ�������ºݤλ��֤ȹԿ���1�¹��������ʿ�ѤǤ��� �����ɽ�����줿���ꥳ���Ȥ���ӤǤ����ͤ�������뤳�ȤǹԤ��ޤ��� "loops"�ͤ��뤳�Ȥǡ����ΥΡ��ɤǼºݤ���䤵�줿�����֤����뤳�Ȥ��Ǥ��ޤ���
EXPLAIN ANALYZE��ɽ�������Total runtime(���¹Ի���)�ˤϡ���̹Ԥ����뤿��λ��֤�¾�ˡ����������塼���ε�ư������֤�ޤޤ�ޤ��� ���Ϥ�������ײ�����λ��֤ϴޤޤ�ޤ��� SELECT�䤤��碌�Ǥϡ����¹Ի��֤ϺǾ�̷ײ�Ρ��ɤ���𤵤�������֤����̾ᆵ���礭���ʤ�ޤ��� INSERT��UPDATE������� DELETE���ޥ�ɤǤϡ��������¹Ի��֤Ϥ��ʤ��礭���ʤ�ޤ��� �����ˤϡ���̹Ԥ����������֤��ޤޤ�뤫��Ǥ��� �����Υ��ޥ�ɤǤϡ��Ǿ�̷ײ�Ρ��ɤλ��֤ϡ�����Ū�˿������Ԥ�黻�����Ť��Ԥξ�����ꤹ�뤿��λ��֤��������ˤ��ѹ���Ԥ����֤ϴޤޤ�ޤ���
EXPLAIN�η�̤��Ԥä���ΰʳ��ο���˻ȤäƤϤ����ʤ����Ȥϡ������ޤǤ⤢��ޤ��� �㤨�С������ʥơ��֥�η�̤ϡ�����ʥơ��֥��Ŭ�ѤǤ���Ȥϲ���Ǥ��ޤ��� �ץ��ʤο��ꥳ���Ȥ������ǤϤʤ������Τ��ᡢ�ơ��֥���羮�ˤ�äưۤʤ�ײ�����ޤ��� ��ü����Ǥ������ơ��֥뤬1�ǥ������ڡ����������ʤ���硢����ǥå��������ѤǤ��롢�Ǥ��ʤ��˴ط��ʤ����ۤȤ�ɾ�˥�������륹�����ײ�����뤳�Ȥˤʤ�ޤ��� �ץ��ʤϡ��ɤΤ褦�ʾ��Ǥ�ơ��֥��������뤿���1�ǥ������ڡ����ɤ���Ԥʤ��Τǡ�����ǥå����Ȥ��뤿����ɲ�Ū�ڡ����ɤ���Ԥ����ͤ��ʤ����Ȥ��ΤäƤ��ޤ���