SlideShare a Scribd company logo
1 of 38
Download to read offline
kyon_mm
#syoboben
2015/02/21
できるチューリング完全!
SQLでもいろいろできる
kyon_mm
Test Architect
TDD/BDD Expert
27 years old
TDD/BDD超入門
STA 15章
Self
Introduction
某「さっき会ったのがしょぼちむさんですよ!」
某「さっき会ったのがしょぼちむさんですよ!」
きょん「まぢで!」
某「さっき会ったのがしょぼちむさんですよ!」
きょん「まぢで!」
某「来月Oracleとか、データモデル設計につい
て勉強会あるんですよ」
某「さっき会ったのがしょぼちむさんですよ!」
きょん「まぢで!」
某「来月Oracleとか、データモデル設計につい
て勉強会あるんですよ」
きょん「まぢで!でもRDBわからん。。。」
某「さっき会ったのがしょぼちむさんですよ!」
きょん「まぢで!」
某「来月Oracleとか、データモデル設計につい
て勉強会あるんですよ」
きょん「まぢで!でもRDBわからん。。。」
某「だいたいなんでもいいらしいよ」
某「さっき会ったのがしょぼちむさんですよ!」
きょん「まぢで!」
某「来月Oracleとか、データモデル設計につい
て勉強会あるんですよ」
きょん「まぢで!でもRDBわからん。。。」
某「だいたいなんでもいいらしいよ」
きょん「あー。そうか。なんでもいいのか。よ
し、チューリング完全について話そう。」
idea…
関係代数、定理、証明の話
デッドロックをモデル検査する
話
データモデルのカテゴリについ
て
Today!
Insert Performance!
Agenda
Problem on Testing,
Migrating
SQL
Conclusion
Problem on Testing,
Migrating
Situation
テストのために大量のレコード
が必要だ。時間がすごいかか
る。。。
テーブルを変更しなければいけ
ない。データ移行に時間がすご
いかかる。。。
Data Create Tool
Factory Girl,etc はモデル
ベースでやりやすい部分もある
が、実行速度についてはあまり
気にされていない。
Tool
MyBatis,etc は版管理のサポー
トはしてくれるけれど、どう行
うかについてのサポートはとて
も薄い。
実行時間が肥大化する問題につ
いては解決しない。
Example
3億件以上のテストデータを用
意して、アプリケーションのパ
フォーマンスを計測したい。
Agenda
Problem on Testing,
Migrating
SQL
Conclusion
SQL
Stored Procedure
RDBMSで高速化といえば!!!
書きたくない筆頭。
2時間くらいかかる。
Bulk Insert
INSERTでの高速化といえば!!
ORM経由みたいなので楽に実行
出来る事もままある。
だいたい数十分で終わる。
-kyon_mm
僕が耐えられるレスポンス時間は
20分が限度だ
Recursive CTE
CTE
1クエリ内で何度も問い合わせ
をできる再帰的に扱える機能
他の方法と違って基本的にはテ
ストデータ読み込みにIOが発生
しない感じになるので、爆速。
10分前後で完了する。
 CTE
WITH Hoge (xxx,yyy) AS
(SELECT aaa, bbb from …)

SELECT xxx, count(yyy)

FROM Hoge …
CTE
変数のグループ名(変数名1, 変
数名2, ...) AS

(SELECT 変数名1の値, 変数名
2の値 ...)
 Recursive CTE
WITH Hoge (xxx,yyy) AS
(SELECT aaa, bbb from …

UNION ALL SELECT …)

SELECT xxx, count(yyy)

FROM Hoge …
 Recursive CTE
WITH Hoge (xxx,yyy) AS (

[初期化を書く部分]

UNION ALL [再帰を書く部分])

SELECT [最終的な出力部分]
WITHで定義する共通表(ex.
Hoge)はいくつでもつくれる
 In Shortly
再帰CTEによって繰り返しが表
現できるようになったことで、
Whereで条件分岐ができるし、
SQLはチューリング完全であ
る!
 In Shortly
基本的に再帰しやすいデータが
やりやすいので、ある規則にし
たがったデータの作成に使いや
すい。
SQL
http://bleis-
tift.hatenablog.com/entry/
20100201/1265035070
CTE
http://www.slideshare.net/
odashinsuke/cte-12545515
Brain f*ck
http://bleis-
tift.hatenablog.com/entry/
20090610/1244615237
Calculator
http://bleis-
tift.hatenablog.com/entry/
20090610/1244560784
Proof
http://assets.en.oreilly.com/1/event/
27/High%20Performance%20SQL%20with
%20PostgreSQL%20Presentation.pdf
http://blog.coelho.net/database/
2013/08/17/turing-sql-1/
Agenda
Problem on Testing,
Migrating
SQL
Conclusion
Conclusion
Conclusion
RDBのデータ作成を高速に行い
たくなったら再帰CTEを思い出
せ!
SQLでいろいろ出来ると楽しい
よ。

More Related Content

Viewers also liked

プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例sohta
 
DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素Takahiro YAMADA
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)Yoshitaka Kawashima
 
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -Yuki Anzai
 
マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]YUKI YAMAGUCHI
 
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]bitter_fox
 

Viewers also liked (6)

プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
 
DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
 
マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]
 
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
 

More from kyon mm

Scrum,Test,Metrics #sgt2016
Scrum,Test,Metrics #sgt2016Scrum,Test,Metrics #sgt2016
Scrum,Test,Metrics #sgt2016kyon mm
 
Kaizen process with test #hackt
Kaizen process with test #hacktKaizen process with test #hackt
Kaizen process with test #hacktkyon mm
 
ザ・ジェネラリスト #5000dai
ザ・ジェネラリスト #5000daiザ・ジェネラリスト #5000dai
ザ・ジェネラリスト #5000daikyon mm
 
ICST2015 GUI Testingの紹介 #SIGSTJ
ICST2015 GUI Testingの紹介 #SIGSTJICST2015 GUI Testingの紹介 #SIGSTJ
ICST2015 GUI Testingの紹介 #SIGSTJkyon mm
 
焦らず急いでの意味
焦らず急いでの意味焦らず急いでの意味
焦らず急いでの意味kyon mm
 
Sta introduction in_kyoto #devkan
Sta introduction in_kyoto #devkanSta introduction in_kyoto #devkan
Sta introduction in_kyoto #devkankyon mm
 
#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン
#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン
#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプラインkyon mm
 
#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオンkyon mm
 
テストファースト、自動テストを導入するという事について(@社内勉強会)
テストファースト、自動テストを導入するという事について(@社内勉強会)テストファースト、自動テストを導入するという事について(@社内勉強会)
テストファースト、自動テストを導入するという事について(@社内勉強会)kyon mm
 
Gradle 2.2, 2.3 news #jggug
Gradle 2.2, 2.3 news #jggugGradle 2.2, 2.3 news #jggug
Gradle 2.2, 2.3 news #jggugkyon mm
 
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpテストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpkyon mm
 
Groovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjugGroovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjugkyon mm
 
テストエンジニアの品格 #automatornight
テストエンジニアの品格 #automatornightテストエンジニアの品格 #automatornight
テストエンジニアの品格 #automatornightkyon mm
 
@kyon_mmの書籍の読み方 #AsianAA
@kyon_mmの書籍の読み方 #AsianAA@kyon_mmの書籍の読み方 #AsianAA
@kyon_mmの書籍の読み方 #AsianAAkyon mm
 
JenkinsとGitで実装するGatewayCheckIn Pattern #AsianAA
JenkinsとGitで実装するGatewayCheckIn Pattern #AsianAAJenkinsとGitで実装するGatewayCheckIn Pattern #AsianAA
JenkinsとGitで実装するGatewayCheckIn Pattern #AsianAAkyon mm
 
GradleのREPLプラグイン紹介 #jggug
GradleのREPLプラグイン紹介 #jggugGradleのREPLプラグイン紹介 #jggug
GradleのREPLプラグイン紹介 #jggugkyon mm
 
契る意味 #pykonjp2014
契る意味 #pykonjp2014契る意味 #pykonjp2014
契る意味 #pykonjp2014kyon mm
 
いつでも聞けるTDD入門 #TDDBC_NAGOYA
いつでも聞けるTDD入門 #TDDBC_NAGOYAいつでも聞けるTDD入門 #TDDBC_NAGOYA
いつでも聞けるTDD入門 #TDDBC_NAGOYAkyon mm
 
Test Retrospective #kyon_kao_wedding in Tokyo
Test Retrospective #kyon_kao_wedding in TokyoTest Retrospective #kyon_kao_wedding in Tokyo
Test Retrospective #kyon_kao_wedding in Tokyokyon mm
 
ソフトウェア開発を勉強し始めて3年間でやったこと~After~ #devsumi
ソフトウェア開発を勉強し始めて3年間でやったこと~After~ #devsumiソフトウェア開発を勉強し始めて3年間でやったこと~After~ #devsumi
ソフトウェア開発を勉強し始めて3年間でやったこと~After~ #devsumikyon mm
 

More from kyon mm (20)

Scrum,Test,Metrics #sgt2016
Scrum,Test,Metrics #sgt2016Scrum,Test,Metrics #sgt2016
Scrum,Test,Metrics #sgt2016
 
Kaizen process with test #hackt
Kaizen process with test #hacktKaizen process with test #hackt
Kaizen process with test #hackt
 
ザ・ジェネラリスト #5000dai
ザ・ジェネラリスト #5000daiザ・ジェネラリスト #5000dai
ザ・ジェネラリスト #5000dai
 
ICST2015 GUI Testingの紹介 #SIGSTJ
ICST2015 GUI Testingの紹介 #SIGSTJICST2015 GUI Testingの紹介 #SIGSTJ
ICST2015 GUI Testingの紹介 #SIGSTJ
 
焦らず急いでの意味
焦らず急いでの意味焦らず急いでの意味
焦らず急いでの意味
 
Sta introduction in_kyoto #devkan
Sta introduction in_kyoto #devkanSta introduction in_kyoto #devkan
Sta introduction in_kyoto #devkan
 
#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン
#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン
#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン
 
#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン
 
テストファースト、自動テストを導入するという事について(@社内勉強会)
テストファースト、自動テストを導入するという事について(@社内勉強会)テストファースト、自動テストを導入するという事について(@社内勉強会)
テストファースト、自動テストを導入するという事について(@社内勉強会)
 
Gradle 2.2, 2.3 news #jggug
Gradle 2.2, 2.3 news #jggugGradle 2.2, 2.3 news #jggug
Gradle 2.2, 2.3 news #jggug
 
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpテストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
 
Groovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjugGroovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjug
 
テストエンジニアの品格 #automatornight
テストエンジニアの品格 #automatornightテストエンジニアの品格 #automatornight
テストエンジニアの品格 #automatornight
 
@kyon_mmの書籍の読み方 #AsianAA
@kyon_mmの書籍の読み方 #AsianAA@kyon_mmの書籍の読み方 #AsianAA
@kyon_mmの書籍の読み方 #AsianAA
 
JenkinsとGitで実装するGatewayCheckIn Pattern #AsianAA
JenkinsとGitで実装するGatewayCheckIn Pattern #AsianAAJenkinsとGitで実装するGatewayCheckIn Pattern #AsianAA
JenkinsとGitで実装するGatewayCheckIn Pattern #AsianAA
 
GradleのREPLプラグイン紹介 #jggug
GradleのREPLプラグイン紹介 #jggugGradleのREPLプラグイン紹介 #jggug
GradleのREPLプラグイン紹介 #jggug
 
契る意味 #pykonjp2014
契る意味 #pykonjp2014契る意味 #pykonjp2014
契る意味 #pykonjp2014
 
いつでも聞けるTDD入門 #TDDBC_NAGOYA
いつでも聞けるTDD入門 #TDDBC_NAGOYAいつでも聞けるTDD入門 #TDDBC_NAGOYA
いつでも聞けるTDD入門 #TDDBC_NAGOYA
 
Test Retrospective #kyon_kao_wedding in Tokyo
Test Retrospective #kyon_kao_wedding in TokyoTest Retrospective #kyon_kao_wedding in Tokyo
Test Retrospective #kyon_kao_wedding in Tokyo
 
ソフトウェア開発を勉強し始めて3年間でやったこと~After~ #devsumi
ソフトウェア開発を勉強し始めて3年間でやったこと~After~ #devsumiソフトウェア開発を勉強し始めて3年間でやったこと~After~ #devsumi
ソフトウェア開発を勉強し始めて3年間でやったこと~After~ #devsumi
 

Recently uploaded

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 

Recently uploaded (9)

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 

出来るチューリング完全!SQLでもいろいろ出来る! #syoboben