Last active
December 22, 2015 03:49
-
-
Save choplin/6412952 to your computer and use it in GitHub Desktop.
ここの記述が怪しいという話 http://d.hatena.ne.jp/Sikushima/20130828/1377663112
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| -- バージョン | |
| SELECT version(); | |
| version | |
| ----------------------------------------------------------------------------------------------------------------------------------------------- | |
| PostgreSQL 9.2.0 on x86_64-apple-darwin11.4.2, compiled by Apple clang version 4.0 (tags/Apple/clang-421.0.60) (based on LLVM 3.1svn), 64-bit | |
| (1 row) | |
| -- ランダム文字 | |
| CREATE OR REPLACE FUNCTION random_char() RETURNS text AS $$ | |
| SELECT chr((round((random() * 25)::numeric, 0))::int + 97); | |
| $$ LANGUAGE SQL VOLATILE; | |
| -- ランダム文字列 | |
| CREATE OR REPLACE FUNCTION random_text(int) RETURNS text AS $$ | |
| SELECT | |
| string_agg(random_char(), '') | |
| FROM | |
| generate_series(1, $1) | |
| $$ LANGUAGE SQL VOLATILE; | |
| -- カラオケ | |
| -- 曲名はランダムな10文字 | |
| CREATE TABLE karaoke ( | |
| id int, | |
| name text | |
| ); | |
| INSERT INTO karaoke | |
| SELECT | |
| i, | |
| random_text(10) | |
| FROM | |
| generate_series(1,100000) t(i) | |
| ; | |
| ANALYZE karaoke; | |
| -- 曲名リスト | |
| -- karaokeからランダム10件 | |
| CREATE TABLE list ( | |
| name text | |
| ); | |
| INSERT INTO list | |
| SELECT | |
| name | |
| FROM | |
| karaoke | |
| ORDER BY | |
| random() | |
| LIMIT | |
| 10 | |
| ; | |
| ANALYZE list; | |
| -- 1 | |
| EXPLAIN SELECT * FROM karaoke WHERE name IN ('pchamwvbgw','uqwywbmvdf','knlokuffsp','efoprrpdfx','ibsguemtcj','wfbbqnvjpp','nqcrctclwp','ghrrxihlks','utqipdgehy','uaywepuxxf'); | |
| QUERY PLAN | |
| ---------------------------------------------------------------------------------------------------------------------------------------------------- | |
| Seq Scan on karaoke (cost=0.00..2791.00 rows=10 width=15) | |
| Filter: (name = ANY ('{pchamwvbgw,uqwywbmvdf,knlokuffsp,efoprrpdfx,ibsguemtcj,wfbbqnvjpp,nqcrctclwp,ghrrxihlks,utqipdgehy,uaywepuxxf}'::text[])) | |
| (2 rows) | |
| -- 2 | |
| EXPLAIN SELECT * FROM karaoke WHERE | |
| name = 'pchamwvbgw' | |
| OR name = 'uqwywbmvdf' | |
| OR name = 'knlokuffsp' | |
| OR name = 'efoprrpdfx' | |
| OR name = 'ibsguemtcj' | |
| OR name = 'wfbbqnvjpp' | |
| OR name = 'nqcrctclwp' | |
| OR name = 'ghrrxihlks' | |
| OR name = 'utqipdgehy' | |
| OR name = 'uaywepuxxf' | |
| ; | |
| QUERY PLAN | |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
| Seq Scan on karaoke (cost=0.00..4041.00 rows=10 width=15) | |
| Filter: ((name = 'pchamwvbgw'::text) OR (name = 'uqwywbmvdf'::text) OR (name = 'knlokuffsp'::text) OR (name = 'efoprrpdfx'::text) OR (name = 'ibsguemtcj'::text) OR (name = 'wfbbqnvjpp'::text) OR (name = 'nqcrctclwp'::text) OR (name = 'ghrrxihlks'::text) OR (name = 'utqipdgehy'::text) OR (name = 'uaywepuxxf'::text)) | |
| (2 rows) | |
| -- 3 | |
| EXPLAIN SELECT * FROM karaoke WHERE name = 'pchamwvbgw' | |
| UNION ALL SELECT * FROM karaoke WHERE name = 'uqwywbmvdf' | |
| UNION ALL SELECT * FROM karaoke WHERE name = 'knlokuffsp' | |
| UNION ALL SELECT * FROM karaoke WHERE name = 'efoprrpdfx' | |
| UNION ALL SELECT * FROM karaoke WHERE name = 'ibsguemtcj' | |
| UNION ALL SELECT * FROM karaoke WHERE name = 'wfbbqnvjpp' | |
| UNION ALL SELECT * FROM karaoke WHERE name = 'nqcrctclwp' | |
| UNION ALL SELECT * FROM karaoke WHERE name = 'ghrrxihlks' | |
| UNION ALL SELECT * FROM karaoke WHERE name = 'utqipdgehy' | |
| UNION ALL SELECT * FROM karaoke WHERE name = 'uaywepuxxf' | |
| ; | |
| QUERY PLAN | |
| ----------------------------------------------------------------------- | |
| Result (cost=0.00..17910.10 rows=10 width=15) | |
| -> Append (cost=0.00..17910.10 rows=10 width=15) | |
| -> Seq Scan on karaoke (cost=0.00..1791.00 rows=1 width=15) | |
| Filter: (name = 'pchamwvbgw'::text) | |
| -> Seq Scan on karaoke (cost=0.00..1791.00 rows=1 width=15) | |
| Filter: (name = 'uqwywbmvdf'::text) | |
| -> Seq Scan on karaoke (cost=0.00..1791.00 rows=1 width=15) | |
| Filter: (name = 'knlokuffsp'::text) | |
| -> Seq Scan on karaoke (cost=0.00..1791.00 rows=1 width=15) | |
| Filter: (name = 'efoprrpdfx'::text) | |
| -> Seq Scan on karaoke (cost=0.00..1791.00 rows=1 width=15) | |
| Filter: (name = 'ibsguemtcj'::text) | |
| -> Seq Scan on karaoke (cost=0.00..1791.00 rows=1 width=15) | |
| Filter: (name = 'wfbbqnvjpp'::text) | |
| -> Seq Scan on karaoke (cost=0.00..1791.00 rows=1 width=15) | |
| Filter: (name = 'nqcrctclwp'::text) | |
| -> Seq Scan on karaoke (cost=0.00..1791.00 rows=1 width=15) | |
| Filter: (name = 'ghrrxihlks'::text) | |
| -> Seq Scan on karaoke (cost=0.00..1791.00 rows=1 width=15) | |
| Filter: (name = 'utqipdgehy'::text) | |
| -> Seq Scan on karaoke (cost=0.00..1791.00 rows=1 width=15) | |
| Filter: (name = 'uaywepuxxf'::text) | |
| (22 rows) | |
| -- 4 | |
| EXPLAIN SELECT * FROM karaoke WHERE name IN (SELECT name FROM list); | |
| QUERY PLAN | |
| ---------------------------------------------------------------------- | |
| Hash Semi Join (cost=54.78..1895.15 rows=1990 width=15) | |
| Hash Cond: (karaoke.name = list.name) | |
| -> Seq Scan on karaoke (cost=0.00..1541.00 rows=100000 width=15) | |
| -> Hash (cost=29.90..29.90 rows=1990 width=11) | |
| -> Seq Scan on list (cost=0.00..29.90 rows=1990 width=11) | |
| (5 rows) | |
| -- exists | |
| EXPLAIN SELECT * FROM karaoke k WHERE EXISTS (SELECT * FROM list l WHERE k.name = l.name); | |
| QUERY PLAN | |
| ------------------------------------------------------------------------ | |
| Hash Semi Join (cost=54.78..1895.15 rows=1990 width=15) | |
| Hash Cond: (k.name = l.name) | |
| -> Seq Scan on karaoke k (cost=0.00..1541.00 rows=100000 width=15) | |
| -> Hash (cost=29.90..29.90 rows=1990 width=11) | |
| -> Seq Scan on list l (cost=0.00..29.90 rows=1990 width=11) | |
| (5 rows) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment