PostgreSQL �ł� watch

�ȑO�ALinux �� watch �R�}���h�ɂ‚��������܂����� PostgreSQL �ɂ� 9.3 ���� \watch ���^�R�}���h���lj�����܂����B

  \watch [SEC]           execute query every SEC seconds
psql=# SELECT CURRENT_TIME;

       timetz
--------------------
 23:02:53.492804+09
(1 row)

psql=# \watch 1

Watch every 1s  Mon Oct 17 23:02:57 2016

      timetz
-------------------
 23:02:57.03674+09
(1 row)

Watch every 1s  Mon Oct 17 23:02:58 2016

       timetz
--------------------
 23:02:58.038192+09
(1 row)

���̂悤�� �O�Ɏ��s���� SQL �����Ԋu�Ŏ��s���Ă���܂��B

�I���� [Ctrl]+[c]�ł��B

�f�t�H���g�� watch �R�}���h�Ɠ����悤�� 2�b�Ԋu�̂悤�ł��B

psql=# SELECT CURRENT_TIME;

       timetz
--------------------
 23:01:20.790009+09
(1 row)

psql=# \watch

Watch every 2s  Mon Oct 17 23:01:25 2016

       timetz
--------------------
 23:01:25.005323+09
(1 row)

Watch every 2s  Mon Oct 17 23:01:27 2016

       timetz
--------------------
 23:01:27.007919+09
(1 row)

INSERT �� UPDATE ���J��Ԃ����s�ł��܂��B

psql=# INSERT INTO test_a VALUES ('a', 'b');

INSERT 0 1

psql=# \watch 1

Watch every 1s  Mon Oct 17 23:09:25 2016

INSERT 0 1

Watch every 1s  Mon Oct 17 23:09:26 2016

INSERT 0 1
psql=# UPDATE test_a SET field2 = 'c' WHERE field1 = 'a';

UPDATE 10

psql=# \watch 1

Watch every 1s  Mon Oct 17 23:10:05 2016

UPDATE 10

Watch every 1s  Mon Oct 17 23:10:06 2016

UPDATE 10

�f�[�^�̊Ď��� �����̌J��Ԃ��Ȃǂ� ���p�ł������ł��ˁB

Excel �ŏ����������N���A����

���܂ɖY���̂Ń����B

Excel �ŏ����������N���A����ɂ́A ���{���̃z�[���^�u�ɂ���u�N���A�v�̉��� �u�����̃N���A�v��I�����܂��B

WRITE_0850_01

WORD �ŃR�s�y�����Ƃ��ɃX�y�[�X������Ȃ��悤�ɂ���

WORD �Ńp�X�Ȃǂ̈ꕔ���R�s�y����Ƃ��� �s�v�ȃX�y�[�X�������Ă��܂����Ƃ�����܂��B

�Ⴆ�΁A����ȕ��Ƀp�X���L�q���Ă��āE�E�E

WRITE_0849_01

�t�@�C�������R�s�[���āE�E�E

WRITE_0849_02

�y�[�X�g���܂��B

WRITE_0849_03

�Ԃ���̂Ƃ���ɃX�y�[�X�������Ă��܂��B

�X�y�[�X�������Ă��܂������ƂɋC�Â��Ȃ��ƌ�ō���܂��� �p��̕��͂������Ȃ���΍��邱�Ƃ��Ȃ��̂� �ݒ�ŃX�y�[�X�����Ȃ��悤�ɂ��Ă��܂��܂��B

�I�v�V��������u�ڍאݒ�v���J���� �u�\��t�����Ɏ�����������v�̉��ɂ���u�ݒ�v�{�^���������܂��B

WRITE_0849_04

�u���ƒP��̊Ԋu�������I�ɒ�������v�̃`�F�b�N���O���܂��B

WRITE_0849_05

����ŃX�y�[�X������Ȃ��Ȃ�܂��B

WRITE_0849_06

WORD �Ńi�r�Q�[�V�����E�B���h�E�ŏ͍\����ύX����

WORD 2010 ���炢���炾�Ǝv���܂��� �A�E�g���C���\�����g�p���Ȃ��Ă��A�͍\�����ȒP�ɕύX�ł���悤�ɂȂ��Ă��܂����B

�܂��A�i�r�Q�[�V�����E�B���h�E��\�����܂��B

WRITE_0848_01

����Ȋ����ŏ͂̌��o�����\������܂��B

WRITE_0848_02

�}�E�X�Ō��o����݂͂܂��B

WRITE_0848_03

�ړ���Ƀh���b�v���܂��B

WRITE_0848_04

���ꂾ���ŏ͂��ړ����܂����B

WRITE_0848_05

�ȒP�ŕ֗��ł��ˁB

SQL �� LATERAL �L�[���[�h

PostgreSQL 9.3 ���� SQL �� LATERAL �Ƃ����L�[���[�h���L�q�ł���悤�ɂȂ��Ă��܂��B �܂��Ǝ��̊g�����Ǝv������A���� LATERAL �� SQL�W�� �ŋK�肳��Ă��邻���ł��B Oracle �ł� 12c ����T�|�[�g����Ă���悤�ł��B

[�Q�l]
LATERAL���g���Ă݂悤 ? Let's Postgres

�g�����Ƃ��Ă� �x���]���H �݂����Ȋ����ł��傤���B PostgreSQL �ł́ALATERAL �𕛖₢���킹��֐��ɑ΂��Ă��Ďw��ł���̂ł����A FROM �Ɏw�肵���₢�����̌��ʂ��A���₢���킹�̒��Ŏg�p���邱�Ƃ��ł��܂��B

���Ƃ��΁A���̂悤�� SQL �̓G���[�ɂȂ�܂��B

psql=# SELECT table1.field1, subquery1.field2
psql-# FROM table1
psql-# LEFT JOIN (
psql-#    SELECT field2 FROM table2
psql-#    WHERE table2.field1 = table1.field1) AS subquery1
psql-#    ON TRUE;

����� �Ԏ��̕����𕛖₢���킹�Ŏg�p���Ă��邽�߂ł��B

�{���́A���̂悤�ɕ��₢���킹����O�ɏo���K�v������܂��B

psql=# SELECT table1.field1, subquery1.field2
psql-# FROM table1
psql-# LEFT JOIN (
psql-#    SELECT field2 FROM table2) AS subquery1
psql-#    ON (subquery1.field1 = table1.field1);

�Ƃ��낪 LATERAL ���g���� ���̂悤�ȏ��������ł��܂��B

psql=# SELECT table1.field1, subquery1.field2
psql-# FROM table1
psql-# LEFT JOIN LATERAL (
psql-#    SELECT field2 FROM table2
psql-#    WHERE table2.field1 = table1.field1) AS subquery1
psql-#    ON TRUE;

LATERAL ���w�肵�����₢���킹�� �ォ��]�������̂� ���₢���킹�̒��� FROM ��̖₢���킹�̗���g�p���邱�Ƃ��ł��܂��B

���ꂾ������ �P�ɕςȏ��������ł��� �����Ȃ̂ł��� ��ŕ]������邱�Ƃ� �`���[�j���O�ɖ𗧂ꍇ������܂��B

�Ⴆ�� �����i100���j�ƌo��ׁi500�����j���� �������Ƃ̌o����擾���܂��B

psql=# SELECT ALL
psql-#     ����.����ID
psql-# ,   �����o��.���v���z
psql-# ,   �����o��.���׌���
psql-# FROM
psql-#     ����
psql-# LEFT JOIN
psql-#     (
psql-#         SELECT ALL
psql-#             ����ID
psql-#         ,   SUM(���z) AS ���v���z
psql-#         ,   COUNT(*) AS ���׌���
psql-#         FROM
psql-#             �o���
psql-#         GROUP BY
psql-#             ����ID
psql-#     ) AS �����o��
psql-#     ON
psql-#         (
psql-#             �����o��.����ID = ����.����ID
psql-#         );

�����炭����� SQL �ɂȂ�Ǝv���܂��B
�������‹��ł� 5,391ms �ł����B

LATERAL ���g���Ǝ��̂悤�ɏ����܂��B

psql=# SELECT ALL
psql-#     ����.����ID
psql-# ,   ����.������
psql-# ,   �����o��.���v���z
psql-# ,   �����o��.���׌���
psql-# FROM
psql-#     ����
psql-# LEFT JOIN
psql-#     LATERAL
psql-#     (
psql-#         SELECT ALL
psql-#             SUM(���z) AS ���v���z
psql-#         ,   COUNT(*) AS ���׌���
psql-#         FROM
psql-#             �o���
psql-#         WHERE
psql-#             �o���.����ID = ����.����ID
psql-#     ) AS �����o��
psql-#     ON
psql-#         TRUE;

���͂��̏ꍇ�͋t�ɒx���Ȃ��� 21,614 ms �ł����B 1�s���•]������������Ԃ�������悤�ł��B

�L�[���ڂł͂Ȃ��������������ɒlj����܂��B
�܂� LATERAL ���g��Ȃ� SQL ����B

psql=# SELECT ALL
psql-#     ����.����ID
psql-# ,   �����o��.���v���z
psql-# ,   �����o��.���׌���
psql-# FROM
psql-#     ����
psql-# LEFT JOIN
psql-#     (
psql-#         SELECT ALL
psql-#             ����ID
psql-#         ,   SUM(���z) AS ���v���z
psql-#         ,   COUNT(*) AS ���׌���
psql-#         FROM
psql-#             �o���
psql-#         GROUP BY
psql-#             ����ID
psql-#     ) AS �����o��
psql-#     ON
psql-#         (
psql-#             �����o��.����ID = ����.����ID
psql-#         )
psql-# WHERE
psql-#     ����.������ = '�V�X�e���P��';
Hash Right Join (actual time=3314.571..3314.574 rows=1 loops=1)
  Hash Cond: ((t_kj_keihi_meisai.����ID)::text = (����.����ID)::text)
  ->  HashAggregate (actual time=3314.411..3314.441 rows=141 loops=1)
        ->  Seq Scan on t_kj_keihi_meisai (actual time=0.121..716.138 rows=5021645 loops=1)
  ->  Hash (actual time=0.089..0.089 rows=1 loops=1)
        Buckets: 1024  Batches: 1  Memory Usage: 1kB
        ->  Seq Scan on r_kj_jigyousho ���� (actual time=0.022..0.085 rows=1 loops=1)
              Filter: (������ = '�V�X�e���P��'::text)
              Rows Removed by Filter: 99

����� 3,314ms �ł����B

���� LATERAL �o�[�W�����B

psql=# SELECT ALL
psql-#     ����.����ID
psql-# ,   ����.������
psql-# ,   �����o��.���v���z
psql-# ,   �����o��.���׌���
psql-# FROM
psql-#     ����
psql-# LEFT JOIN
psql-#     LATERAL
psql-#     (
psql-#         SELECT ALL
psql-#             SUM(���z) AS ���v���z
psql-#         ,   COUNT(*) AS ���׌���
psql-#         FROM
psql-#             �o���
psql-#         WHERE
psql-#             �o���.����ID = ����.����ID
psql-#     ) AS �����o��
psql-#     ON
psql-#         TRUE
psql-# WHERE
psql-#     ����.������ = '�V�X�e���P��';
Nested Loop (actual time=221.481..221.523 rows=1 loops=1)
  ->  Seq Scan on r_kj_jigyousho ���� (actual time=0.029..0.070 rows=1 loops=1)
        Filter: (������ = '�V�X�e���P��'::text)
        Rows Removed by Filter: 99
  ->  Aggregate (actual time=221.448..221.449 rows=1 loops=1)
        ->  Bitmap Heap Scan on t_kj_keihi_meisai �o��� (actual time=217.928..219.075 rows=4633 loops=1)
              Recheck Cond: ((����ID)::text = (����.����ID)::text)
              ->  Bitmap Index Scan on t_yj_keihi_meisai_idx1 (actual time=217.882..217.882 rows=4633 loops=1)
                    Index Cond: ((����ID)::text = (����.����ID)::text)

������� 221ms �ł����B 10�{�ȏ㑬���Ȃ��Ă��܂��B

���̂悤�ɏꍇ�ɂ���Ă� ���Ȃ葬���Ȃ邱�Ƃ�����܂��B

�܂� LATERAL ���w�肵���ꍇ FROM �̌��ʂ̍s�ɑ΂��� 1�s���•]������邽�� INNER JOIN ���w�肵���ꍇ�ł��O�������̂悤�� ���̌��ʂ̍s��S�ĕԂ��̂Œ��ӂ��K�v�ł��B

WORD �ŃR�����g���ꊇ�폜����

���܂ɖY���̂Ń����B

WORD �����ɂ̓R�����g��}�����邱�Ƃ��ł��܂��� �����ɑ}�����ꂽ�R�����g���ꊇ�ō폜����ɂ� �u�Z�{�v�̃R�����g�́u�폜�v�̍X�ɉ��̃��j���[���� �u�h�L�������g���̂��ׂẴR�����g���폜�v��I�����܂��B

WRITE_0846_01

Google �T�C�g������

Amazon�A�\�V�G�C�g