Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Check these out next
PHP基本的関数QUIZ
Wataru Terada
Perl logging
keroyonn
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
leverages_event
phpspecで学ぶLondon School TDD
Akio Ishida
HHVM Hack
Masaaki Yonebayashi
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
Yuki Okamoto
Mojoliciousをウェブ制作現場で使ってみてる
jamadam
40分濃縮 PHP classの教室
Yusuke Ando
1
of
52
Top clipped slide
SlowQueryとの戦い
Oct. 11, 2014
•
0 likes
5 likes
×
Be the first to like this
Show More
•
3,481 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Engineering
2014/10/11 PHPカンファレンス2014 LT無差別級での発表資料 遭遇した衝撃的なSQLを紹介し、ORMと開発者に一言申します。
Ken Gotoh
Follow
エンジニア at 株式会社サイバード
Advertisement
Advertisement
Advertisement
Recommended
よいことも悪いこともぜんぶPHPが教えてくれた
Moriyoshi Koizumi
6.6K views
•
29 slides
PHP7を魔改造した話
Moriyoshi Koizumi
2.5K views
•
8 slides
Symfony2 How to create your Bundle
chobi e
1.1K views
•
73 slides
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
sters
1.7K views
•
26 slides
知ってるようで意外と知らないPHPの便利関数
Wataru Terada
9.7K views
•
57 slides
Ruby 同好会宣言
Yuya Takeyama
753 views
•
63 slides
More Related Content
Slideshows for you
(20)
PHP基本的関数QUIZ
Wataru Terada
•
4.1K views
Perl logging
keroyonn
•
3.3K views
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
leverages_event
•
9.1K views
phpspecで学ぶLondon School TDD
Akio Ishida
•
7.5K views
HHVM Hack
Masaaki Yonebayashi
•
5K views
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
Yuki Okamoto
•
7.7K views
Mojoliciousをウェブ制作現場で使ってみてる
jamadam
•
4.9K views
40分濃縮 PHP classの教室
Yusuke Ando
•
28.4K views
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
Hiroaki KOBAYASHI
•
1.2K views
PSR-1 と PSR-2 を5分でざっくり理解する
Wataru Terada
•
17.6K views
PHP5.5新機能「ジェネレータ」初心者入門
kwatch
•
22.2K views
php.js
Kenta USAMI
•
10.6K views
実用裏方 Perl 入門
keroyonn
•
1.6K views
PHP の GC の話
y-uti
•
18.2K views
WebAPIではじめるphp入門
Hiroaki Murayama
•
2.7K views
Hack/HHVM 入門
y-uti
•
8.4K views
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
アシアル株式会社
•
3K views
traitを使って楽したい話
infinite_loop
•
26.5K views
PHPの今とこれから2014
Rui Hirokawa
•
21.3K views
Deep dive into oss written in swift
Yuki Asai
•
3.7K views
Similar to SlowQueryとの戦い
(20)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
Arata Fujimura
•
1.7K views
Silex入門
Takuya Sato
•
7.9K views
「Html sql」で図書館hpにアクセスしてみよう
Kentaro Matsui
•
2.5K views
意図を表現するプログラミング
Atsuhiro Kubo
•
5.2K views
The master plan ofscaling a web application
Yusuke Wada
•
7K views
MT meets PHP - PHP conference Kansai 2013
純生 野田
•
18.3K views
PHPコードではなく PHPコードの「書き方」を知る
Masashi Shinbara
•
29.3K views
WordPress安全運用の基礎
hiro345
•
2.2K views
IPメッセージングはこうやって実装するのだ!
Sakae Saito
•
713 views
JavaScriptおよびXPages Vote技術解説
賢次 海老原
•
885 views
Using Dancer
Yoshihiro Sasaki
•
5.3K views
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
Yusuke Ando
•
4.6K views
Perl 非同期プログラミング
lestrrat
•
7.2K views
swooleを試してみた
Yukihiro Katsumi
•
501 views
アルゴリズム+データ構造勉強会(8)
noldor
•
3.5K views
MT meets PHP
純生 野田
•
10K views
FP in JS
Kiara Grouwstra
•
499 views
Yahoo!ボックスAPI Hackathon向け資料
Yahoo!デベロッパーネットワーク
•
4.2K views
pairsでのAngularJS x TypeScript x e2e @めぐすた#1
Takuma Morikawa
•
3.6K views
SPAJAMでやったこと
Hiroto Imoto
•
4.8K views
Advertisement
Recently uploaded
(20)
EchoyaGinhanazeSu_inoka.pptx
keink
•
2 views
103卡内基梅隆大学.pdf
LorettaPrice2
•
2 views
SPECIALIZED heavy racks.pdf
FernandoRivasCortes1
•
2 views
#国外留学文凭购买Trent假毕业证书
fc2c0f2b1mymailol
•
2 views
法国:蒙彼利埃大学毕业证办理流程
cyvyvgk
•
3 views
★可查可存档〖制作波恩大学文凭证书毕业证〗
tujjj
•
9 views
☀️《UMCP毕业证仿真》
DFFFFG
•
2 views
☀️《Ohio毕业证仿真》
DFFFFG
•
2 views
★可查可存档〖制作魁北克大学文凭证书毕业证〗
mmmm282537
•
2 views
12莫纳什.pdf
dsadasd17
•
3 views
☀️《Bournemouth毕业证仿真》
fggg13
•
2 views
230216_AI技術共有会_園部.pdf
RyosukeSonobe
•
2 views
174-田纳西大学.pdf
LorettaPrice2
•
2 views
★可查可存档〖制作乌尔姆大学文凭证书毕业证〗
tujjj
•
18 views
★可查可存档〖制作巴黎第十二大大学文凭证书毕业证〗
tujjj
•
3 views
143-南卫理公会大学.pdf
dsadasd17
•
3 views
はじめてのハッカソン.pptx
rare0b
•
5 views
★可查可存档〖制作贝桑松大学文凭证书毕业证〗
tujjj
•
2 views
☀️《UMKC毕业证仿真》
DFFFFG
•
3 views
12曼尼托巴大学.pdf
dsadasd17
•
2 views
SlowQueryとの戦い
SlowQueryとの戦い (ほとんどORM) 2014/10/11
PHP Conference 2014 株式会社サイバード ゲーム事業本部 後藤 健
後藤 健 •
新卒2年目 25歳 • ゲームインフラチーム • インフラ、ミドルウェアまわり • PHPer(たまにPython) • 趣味 車・ライブ・スノーボード etc.. • Twitter : @gotyoooo
さっそくですが。
O/Rマッパー 使ってる人! 挙手!!!
ありがとうございます!
O/Rマッパー なんて使わねー 俺は生SQLだ!!
挙手!!!
ありがとうございます!
世の中的なO/Rマッパー 利用率が分かったところで
http://blog-imgs-54-origin.fc2.com/j/i/k/jikomanzoku009/saa.jpg
SQLにはご注意を http://www.weblio.jp/img/dict/hyazi/112.gif
特にO/Rマッパー をご利用の皆様 http://www.weblio.jp/img/dict/hyazi/112.gif
http://cyline-jp.com/download/SQL.png http://f.st-hatena.com/images/fotolife/G/GET/20080131/20080131075901.jpg
じゃないと http://cyline-jp.com/download/SQL.png http://f.st-hatena.com/images/fotolife/G/GET/20080131/20080131075901.jpg
恐ろしいこと になりますよ
では実例
その1
意味のないソート
SELECT * FROM
t1 WHERE ~省略~ ORDER BY t1.updated DESC, t1.updated ASC LIMIT 1
SELECT * FROM
t1 WHERE ~省略~ ORDER BY t1.updated DESC, t1.updated ASC LIMIT 1
http://www.rosei.jp/jinjour/wp-content/uploads/2011/12/fotolia_36435421_Subscription_L.jpg
Model_Collection::find( 'first', array(
‘order_by' => array( ‘updated' => ‘DESC' ) ) );
Model_Collection::find( 'first', array(
いらん ‘order_by' => array( ‘updated' => ‘DESC' ) ) );
Model_Collection::find( 'all', array(
'order_by'=>array('updated'=>'DESC') ) ); Model_Collection::find( 'first', array( 'order_by'=>array('updated'=>'DESC') ) );
Model_Collection::find( 'all', array(
'order_by'=>array('updated'=>'DESC') ) ); Model_Collection::find( 'first', array( コピペコードの弊害 'order_by'=>array('updated'=>'DESC') ) );
Model_Collection::find( 'all', array(
'order_by'=>array('updated'=>'DESC') ) ); 返ってきたデータ Model_しCollection::か意識find( 'first', してない array( 'order_by'=>array('updated'=>'DESC') ) );
Model_Collection::find( 'all', array(
'order_by'=>array('updated'=>'DESC') ) ); Model_Collection::find( 'first', array( 生SQLなら防げた? 'order_by'=>array('updated'=>'DESC') ) );
その2
悪名高きn+1問題
user_profile user_point_log id
name sex … 1 goto 1 … 2 ken 2 … 3 gotyoooo 1 … … … … … 10 kenken 1 … … … … … id user_id point … 1 1 10 … 2 2 200 … 3 1 100 … … … … 10 3 30 … … … …
$user = User_Profile::find(‘all',
array( ‘where’ => array('sex' => 1) )); $user_point = array(); foreach ($user as $value) { $user_point[] = User_Point_Log::find(‘first’, array( ‘where’ => array(‘user_id' => $value[‘id’]) ) ); }
$user = User_Profile::find(‘all',
array( ‘where’ => array('sex' => 1) )); $user_point = array(); foreach ($user as $value) { $user_point[] = User_Point::find(‘first’, array( 余裕かましてると… ‘where’ => array('id' => $value[‘id’]) ) ); }
$user = User_Profile::‘where’
=> array('sex' (1) find(‘all', array( => 1) )); $user_point = array(); foreach ($user as $value) { $user_point[] = User_Point::find(‘first’, array( (2) ‘where’ => array('id' => $value[‘id’]) ) ); }
(1) × 1
(2) × n SELECT * FROM user_profile WHERE sex = 1 SELECT * FROM user_point_log WHERE user_id = #id
(1) × 1
(2) × n SELECT * FROM user_profile WHERE sex = 1 無駄なクエリ一杯 SELECT * FROM user_point_log WHERE user_id = #id
(1) × 1
(2) × n SELECT * FROM user_profile WHERE sex = 1 データ数に応じてnも増加 SELECT * FROM user_point_log WHERE user_id = #id
SELECT * FROM
user_profile INNER JOIN user_point ON user_profile.id = user_point_log.id WHERE user_profile.sex = 1
SELECT * FROM
user_profile INNER JOIN user_point ON user_profile.id = user_point_log.id WHERE user_profile.sex = 1 JOINしましょう
例 終わり すごい基本な例でごめんなさいorz
何が言いたいか http://www.canstockphoto.com.br/foto-imagens/eureka.html#file_view.php?id=13126638
http://cyline-jp.com/download/SQL.png http://f.st-hatena.com/images/fotolife/G/GET/20080131/20080131075901.jpg
投げるクエリを意識すべき http://cyline-jp.com/download/SQL.png http://f.st-hatena.com/images/fotolife/G/GET/20080131/20080131075901.jpg
意識できる環境を作ろう http://cyline-jp.com/download/SQL.png http://f.st-hatena.com/images/fotolife/G/GET/20080131/20080131075901.jpg
テスト環境にも ある程度のデータ量 http://ja.gofreedownload.net/free-icon/icons/misc-database-109423/#.VDc0idSsWcY
投げられたSQLを 出力できるような仕組み http://www.tech-faq.com/wp-content/uploads/images/SQL-Injection-Attack.jpg
チーム別スロークエリー 出力ランキングとか素敵 http://www.slot-pioneer.co.jp/product/kingbary/pop/kingbary_08.jpg
弊社もまだまだ 出来てませんorz http://ja.gofreedownload.net/free-icon/icons/misc-database-109423/#.VDc0idSsWcY
http://www.tech-faq.com/wp-content/uploads/images/SQL-Injection-Attack.jpg http://www.slot-pioneer.co.jp/product/kingbary/pop/kingbary_08.jpg
こんなグラフ出す前に
糞クエリ 撲滅しましょう
ありがとうございました。 ここでドラ娘(?)が鳴らす(予定)
Advertisement