�䤤��碌����ǽ��¿�����װ��˱ƶ�����ޤ����桼��������Ǥ����Τ⤢��ޤ��������Ѥ��Ƥ��륷���ƥ��߷פ˵������뺬��Ū���װ��⤢��ޤ������ξϤǤ� PostgreSQL ����ǽ���������塼�˥��뤿��Υҥ�Ȥ����ޤ���
PostgreSQL ��Ϳ����줿�䤤��碌���� �䤤��碌�ײ�����Ф��ޤ����䤤��碌�ι�¤�ȴޤޤ��ǡ�����������Ŭ�����������䤤��碌�ײ�����뤳�Ȥ��ɤ���ǽ�����뤿������˽��פˤʤ�ޤ���EXPLAIN ���ޥ�ɤ�Ȥ��С������ƥब�ɤΤ褦���䤤��碌�ײ���ä��Τ��狼��ޤ����䤤��碌�ײ���ɤߤ��ʤ����ȤˤĤ��Ƥϡ����ӹ��ϰϤˤ錄����塼�ȥꥢ�����ʤ���Фʤ�ʤ��ۤɤ��Ӥ�ɬ�פǤ�������ʸ��Ϥ����ޤǥ��С����ޤ�������Ū�ʾ���Ϥ����Ĥ����ޤ���
���ߤΤȤ��� EXPLAIN �����Ϥ�����ͤˤϰʲ��Τ�Τ�����ޤ���
ͽ�ۤ�����������Υ����ȡʽ����ѤΥ�������Ϥ����ޤǤ˾������֡����Ȥ��� SORT �Ρ��ɤǼ¹Ԥ���륽���Ƚ����λ��֡ˡ�
ͽ�ۤ�������ΤΥ����ȡʷ�̤Υ��ץ����Τ���Ф������Υ����ȡ��ȤϤ��äƤ⡢LIMIT ��Ȥä��䤤��碌�ξ������ΤΥ����ȷ���������ߤ��ޤ��ˡ�
���ηײ�Ρ��ɤ����Ϥ���Ԥο�����ʤ���� LIMIT �������䤤��碌���θ������ΤǤ��ˡ�
���ηײ�Ρ��ɤ����Ϥ���ԤΡʥХ���ñ�̤ǤΡ˿���ʿ������
�����Ȥϡ����Ф��ǥ������ڡ���ñ�̤�¬�ꤵ��ޤ�����CPU ����ô�˴ؤ��Ƥο���ϡ�Ŭ�������Ū�˷����ˤ������äƥǥ������ڡ���ñ�̤Ǵ�������ޤ��������δ���ͤθ��̤��Τꤿ�����ϡ� �����ԥ������μ¹Ի�����ѥ����ΰ����Ȥ��Ʋ������ˡ�
��̥Ρ��ɤΥ����Ȥˤϡ����ƤλҥΡ��ɤΥ����Ȥ⤽����˴ޤޤ�Ƥ��뤳�Ȥ�α�դ��Ƥ������������Υ����Ȥϥץ��ʤ䥪�ץƥ��ޥ�������Ϳ���륳���ȤΤ�ȿ�Ǥ�������ޤ����פǤ����Ȥ�櫓����̤Υ��ץ��ե���ȥ���ɤ�ž�����륳���Ȥϡ��ºݤν������֤���Ⱦ�������ǽ��������ˤ�ؤ�餺���ץ��ʤ�̵�뤷�ޤ�������ϡ��ײ�����ѹ����褦�Ȥ�ɤ����뤳�Ȥ�Ǥ��ʤ�����Ǥ������������ײ�Ϥɤ�ʤ�ΤǤ��졢���٤�Ʊ�����ץ���̤Ȥ��ƽ��Ϥ���ȿ��ꤷ�Ƥ��ޤ�����
���ϹԿ����䤤��碌�ˤ�äƽ������뤤�ϥ�����줿�Կ���ɽ���� ���ʤ��Τ���¿�������ˤ����ʤäƤ��ޤ��������Ρ��ɤ�Ŭ�Ѥ���뤹�٤Ƥ� WEHRE ��������������������ͤ�ȿ�Ǥ����̾�λ����⾯�ʤ��Կ��ˤʤ�ޤ�������Ū�ˤϡ��Ǿ�̤ιԿ��ο����ͤϡ��ºݤ��䤤��碌�ˤ�ä��֤��졢�������졢���뤤�Ϻ�����줿�����ιԿ��Ȥʤ�ޤ���
�����Ĥ�����ޤ���vacuum analyze ������� regress test �ǡ����١�����ȤäƤ��ޤ������Ѥ��������ƥ�� 7.2 ��ȯ�ǤǤ��ˡ�
regression=# EXPLAIN SELECT * FROM tenk1; NOTICE: 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���ƤߤƲ������ˡ�
�Ǥϡ������ä����䤤��碌���ѹ����Ƥߤޤ���
regression=# EXPLAIN SELECT * FROM tenk1 WHERE unique1 < 1000; NOTICE: QUERY PLAN: Seq Scan on tenk1 (cost=0.00..358.00 rows=1007 width=148)
WHERE �礬���뤿�ᡢ���ϹԿ��θ��Ѥ꤬�������ʤäƤ��ޤ����������������Ȥ��� 10000 �Ԥ��٤Ƥ����ɬ�פ����뤿�ᡢ�����ȤϾ������ʤäƤ��ޤ��ºݤˤϡ�WHERE �������뤿��� CPU ���֤�;�פˤ����뤳�Ȥ�ȿ�Ǥ��ơ��ۤ�ξ����Ǥ��������Ȥ��徺���Ƥ��ޤ���
�����䤤��碌������ºݤιԿ��� 1000�Ǥ���������������ϳ����ͤˤ����ޤ����μ¸������¹Ԥ�����硢�����餯¿���ۤʤ�����ͤ�����Ǥ��礦����äȤ����ȡ������ ANALYZE ���ޥ�ɤ�Ԥ��٤��Ѳ����ޤ����ʤ��ʤ顢ANALYZE �����������������ϡ��ơ��֥�Υ������ɸ�ܤ�����Ф���뤫��Ǥ���
�ǤϤ�����䤤��碌���ѹ��������Τ�궯�����¤��Ƥߤޤ���
regression=# EXPLAIN SELECT * FROM tenk1 WHERE unique1 < 50; NOTICE: QUERY PLAN: Index Scan using tenk1_unique1 on tenk1 (cost=0.00..181.09 rows=49 width=148)
WHERE �������������ʬ����ȡ��ץ��ʤϥ��������������⥤��ǥå���������²��Ǥ���ȷ��ꤹ��褦�ˤʤ뤳�Ȥ�ʬ����ޤ������ηײ�Ǥϡ�����ǥå��������뤿��ˤ��ä� 50 ���ץ��������������Ф褤���Ȥˤʤ�ޤ����Ǥ����顢�ǥ������ڡ������Τ��༡�ɤߤȤ���⡢����ǥå����ˤ��ġ��μ��Ф��Ϲ���ˤĤ��ˤ�ؤ�餺�����ηײ褬���Ѥ���ޤ���
�̤θ��������ɲä��ޤ���
regression=# EXPLAIN SELECT * FROM tenk1 WHERE unique1 < 50 AND regression-# stringu1 = 'xxx'; NOTICE: QUERY PLAN: Index Scan using tenk1_unique1 on tenk1 (cost=0.00..181.22 rows=1 width=148)
�ɲä����� stringu1 = 'xxx' �ˤ����ϹԿ��ο����ͤϸ��������ΤΡ��������륿�ץ�ν�����Ѥ��ʤ�����˥����Ȥϸ��äƤ��ޤ���
���ޤ������˻ȤäƤ����ե�����ɤ�Ȥä�2�ĤΥơ��֥���礷�Ƥߤޤ��礦��
regression=# EXPLAIN SELECT * FROM tenk1 t1, tenk2 t2 WHERE t1.unique1 < 50 regression-# AND t1.unique2 = t2.unique2; NOTICE: QUERY PLAN: Nested Loop (cost=0.00..330.41 rows=49 width=296) -> Index Scan using tenk1_unique1 on tenk1 t1 (cost=0.00..181.09 rows=49 width=148) -> Index Scan using tenk2_unique2 on tenk2 t2 (cost=0.00..3.01 rows=1 width=148)
��������Ҿ��롼���Ǥϡ������������ˡ��Ǹ����Ǽ������Τ�Ʊ������ǥå���������Ȥ��Ƥ��ޤ��������ơ�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 �ե饰����Ѥ��ơ��ץ��ʤ��Ǥ��ɤ��ȹͤ��Ƥ�����ά����Ū��̵�뤵������ˡ�ˤ�ꡢ�ۤʤä��ײ��ѻ����뤳�Ȥ��Ǥ��ޤ��������˸���Ū�ʥġ���Ǥ��������Ѳ��ͤ�����ޤ��� Section 11.3�⻲�Ȥ�����������
regression=# set enable_nestloop = off; SET VARIABLE regression=# EXPLAIN SELECT * FROM tenk1 t1, tenk2 t2 WHERE t1.unique1 < 50 regression-# AND t1.unique2 = t2.unique2; NOTICE: QUERY PLAN: Hash Join (cost=181.22..564.83 rows=49 width=296) -> Seq Scan on tenk2 t2 (cost=0.00..333.00 rows=10000 width=148) -> Hash (cost=181.09..181.09 rows=49 width=148) -> Index Scan using tenk1_unique1 on tenk1 t1 (cost=0.00..181.09 rows=49 width=148)
���ηײ�Ǥϡ�����ǥå�����������Ȥä� tenk1 ����ɬ�פ� 50 �Ԥ���Ф��ƥ����Υϥå���ơ��֥�˳�Ǽ�������θ塢 tenk2 ������륹����ơ� tenk2 �Υ��ץ���� t1.unique2 = t2.unique2 �����������ɤ����ϥå���ơ��֥�����ޤ���tenk1 ���ɤߤȤꡢ�ϥå���ơ��֥�����ꤹ�뤿��Υ����Ȥϡ�tenk2 ���ɤߤȤ��Ϥ��ޤǥ��ץ�����ꤷ�ޤ���Τǡ������˥ϥå�����ν�������ȤȤʤ�ޤ������η��ο��������֤ˤϡ��ϥå���ơ��֥�� 10000 �����롢�礭�� CPU ���֤��ޤޤ�Ƥ��ޤ��������������ηײ跿�Ǥϥϥå���ơ��֥������ϰ��٤ΤߤǤ��Τ� 10000 x 189.01 ʬ�����Ѥ�������ʤ����Ȥ����դ��Ʋ�������
EXPLAIN ANALYZE ����Ѥ��ƥץ��ʤ����ꤹ�륳���Ȥ����٤��������뤳�Ȥ��Ǥ��ޤ������Υ��ޥ�ɤϼºݤˤ����䤤��碌��¹Ԥ����ײ�Ρ�������פ����ºݤμ¹Ի��֤����̤� EXPLAINN ���������ꥳ���Ȥ�Ʊ���ͤȰ���ɽ�����ޤ����㤨�С��ʲ��Τ褦�ʷ�̤����뤳�Ȥ��Ǥ��ޤ���
regression=# EXPLAIN ANALYZE regression-# SELECT * FROM tenk1 t1, tenk2 t2 regression-# WHERE t1.unique1 < 50 AND t1.unique2 = t2.unique2; NOTICE: QUERY PLAN: Nested Loop (cost=0.00..330.41 rows=49 width=296) (actual time=1.31..28.90 rows=50 loops=1) -> Index Scan using tenk1_unique1 on tenk1 t1 (cost=0.00..181.09 rows=49 width=148) (actual time=0.69..8.84 rows=50 loops=1) -> Index Scan using tenk2_unique2 on tenk2 t2 (cost=0.00..3.01 rows=1 width=148) (actual time=0.28..0.31 rows=1 loops=50) Total runtime: 30.67 msec
"actual time" �ͤϼ»��֤�ߥ���ñ�̤�ɽ����Ƥ��뤳�ȡ� "cost" �����ͤϥǥ������ɤߤȤ�˴ؤ��벿�餫��ñ�̤�ɽ����Ƥ��뤳�Ȥ����դ��Ʋ��������Ǥ����餽�Τޤ���Ӥ��뤳�ȤϤǤ��ޤ������ܤ������Ϥ��γ��Ǥ���
�䤤��碌�ײ����ˤϡ����٤�ʣ�������ײ�Ρ��ɤ�¹ԤǤ����Τ�����ޤ����㤨�С���Ҥ�����Ҿ��롼�פηײ�Ǥ���������ǥå����������ϳ����Υ��ץ���˰��ٹԤ��ޤ������Τ褦�ʾ�硢"loops" �ͤϤ��ΥΡ��ɤ�¹Ԥ������������𤷡�ɽ�������ºݤλ��֤ȹԿ��� 1 �¹��������ʿ�ѤǤ��������ɽ�����줿���ꥳ���Ȥ���ӤǤ����ͤ�������뤳�ȤǹԤ��ޤ���"loops" �ͤ��뤳�Ȥǡ����ΥΡ��ɤǼºݤ���䤵�줿�����֤����뤳�Ȥ��Ǥ��ޤ���
EXPLAIN ANALYZE ��ɽ������� "total runtime"�����¹Ի��֡ˤˤϡ���̥��ץ�����뤿��λ��֤�¾�ˡ����������塼���ε�ư������֤�ޤޤ�ޤ������Ϥ�������ײ�����λ��֤ϴޤޤ�ޤ���SELECT �䤤��碌�Ǥϡ����¹Ի��֤ϺǾ�̷ײ�Ρ��ɤ���𤵤�������֤����̾ᆵ���礭���ʤ�ޤ���INSERT��UPDATE��DELETE �䤤��碌�Ǥϡ��������¹Ի��֤Ϥ��ʤ��礭���ʤ�ޤ��������ˤϽ��ϥ��ץ�����������֤��ޤޤ�뤫��Ǥ����������䤤��碌�Ǥϡ��Ǿ�̷ײ�Ρ��ɤλ��֤ϡ�����Ū�˿��������ץ��黻�����Ť����ץ�ξ�����ꤹ�뤿��λ��֤��������ˤ��ѹ���Ԥ����֤ϴޤޤ�ޤ���
EXPLAIN �η�̤���Ԥä���ΰʳ��ο���˻ȤäƤϤ����ʤ����ȤϤ����ޤǤ⤢��ޤ����㤨�С������ʥơ��֥�η�̤ϡ�����ʥơ��֥��Ŭ�ѤǤ���Ȥϲ���Ǥ��ޤ��ץ��ʤο��ꥳ���Ȥ������ǤϤʤ������Τ��ᡢ�ơ��֥���羮�ˤ�äưۤʤ�ײ�����ޤ�����ü����Ǥ������ơ��֥뤬 1 �ǥ������ڡ����������ʤ���硢����ǥå��������ѤǤ��롢�Ǥ��ʤ��˴ط��ʤ����ۤȤ�ɾ�˥�������륹�����ײ�����뤳�Ȥˤʤ�ޤ����ץ��ʤϡ��ɤΤ褦�ʾ��Ǥ�ơ��֥��������뤿��� 1 �ǥ������ڡ����ɤߤȤ��Ԥʤ��Τǡ�����ǥå����Ȥ��뤿����ɲ�Ū�ڡ����ɤߤȤ��Ԥ����ͤ��ʤ����Ȥ��ΤäƤ��ޤ���