【新機能】作り忘れたまとめはありませんか?31日前まで期間指定してまとめが作れる高度な検索ができました。有料APIだからツイートの漏れはありません!
22
ログインして広告を非表示にする
masahiro nagano @kazeburo 2014-03-06 13:10:10
2014年なんだからCOUNT(*)とかSQL_CALC_FOUND_ROWSとかLIMIT OFFSETのページングはやめようぜ
MATSUO Masaru @localdisk 2014-03-06 13:36:15
え、limit offset 使ったらダメなん? ページングってどうするのがイマドキなの?
くわっちょ@社畜犬 @kuwaccho0711 2014-03-06 13:48:21
@localdisk ダメと言われた経緯がわかりませんが、遅くなるからですかね? SQLでやるなら何らかのID使ってbetweenでやるとかでしょうか。
MATSUO Masaru @localdisk 2014-03-06 15:37:11
@kuwaccho0711 https://t.co/TNuRbYK2OS このツイートっす。今はどうするのがベストなんでしょう?
Ryuta Kamizono @kamipo 2014-03-06 18:18:52
@localdisk 件数が絞り込めない場合のCOUNTや大きなOFFSETが、少なくとも今のMySQLでは瞬時に結果を返せない重い処理になるので、重い処理だという前提で設計しましょうという意図だと思います。昔の資料ですが参考になれば http://t.co/ywMgiwmyd0
oranie @oranie 2014-03-11 20:43:20
今度はMySQLか・・・。頭がパンクしてきた。
大沢和宏 @Yappo 2014-03-11 20:53:28
SQL_CALC_FOUND_ROWS だめな理由がなんだっけ、っておもって試しに kazeburo SQL_CALC_FOUND_ROWS ってググると、ダメって事だけわかって便利
大沢和宏 @Yappo 2014-03-11 20:56:10
LIMIT OFFSET 使ってページングやってけるサービスってデータ少ないサービスっぽそうってのだけは、未来検索ブラジルのお陰で mysqld のソースコードレベルで知見を得ることができてる
Ryuta Kamizono @kamipo 2014-03-11 21:00:24
SQL_CALC_FOUND_ROWS は結局 COUNT してしまうから件数が多いと命取りなんで、どうしても COUNT しなきゃいけない作りなんだったら件数キャッシュするの検討してくれないとおじちゃん泣いちゃうって話だと思う。
tagomoris @tagomoris 2014-03-11 21:04:50
SQL_CALC_FOUND_ROWS って行全部読んじゃうから超おっせーという話かと思ってたけど、LIMIT以外の部分は行全体は読みにいかないの?
Daisuke Maki (anovaさん) @lestrrat 2014-03-11 21:07:05
SQL_CALC_FOUND_ROWS 必要なので使ってるけど、この話題が出るたびに心が痛む
Masahiro Chiba @nihen 2014-03-11 21:09:44
countがそもそも駄目って話はおいておいて、SQL_CALC_FOND_ROWSは、http://t.co/0wzLAX11xC このバグ踏んでからもう使うもんかってなりました
Ryuta Kamizono @kamipo 2014-03-11 21:10:42
@tagomoris いわゆる ORDER BY 狙いのインデックスを使えば LIMIT 分だけ行の読み込みすることができるんですが、そういうインデックスを使っていても SQL_CALC_FOUND_ROWS をつけると件数を数えるのにその条件での全行を読んじゃうんですよね。
大沢和宏 @Yappo 2014-03-11 21:12:21
SQL_CALC_FOUND_ROWS は最後まで読むんです
yoku0825 @yoku0825 2014-03-11 21:16:40
sql_calc_found_rows、「スキャンに強いMyISAM」時代の遺物感ある。
masahiro nagano @kazeburo 2014-03-11 21:17:43
これは、、 RT @nihen: countがそもそも駄目って話はおいておいて、SQL_CALC_FOND_ROWSは、http://t.co/d7yDfKAOUK このバグ踏んでからもう使うもんかってなりました
大沢和宏 @Yappo 2014-03-11 21:18:19
Senna+Mysql は MyISAM だったけど SQL_CALC_FOUND_ROWS するとめっちゃ無駄なスキャン走ってパフォーマンスに問題でるのコード読んで把握したから、それスキップするパッチ書いたくらい重いんです http://t.co/Eu5kmu541u
yoku0825 @yoku0825 2014-03-11 21:21:30
sql_calc_found_rowsに限らず、結果がおかしくなる(特にパーティションが絡んだ時)のは5.6でいっぱい叩き出されてます。
大沢和宏 @Yappo 2014-03-11 21:22:09
要所を選んで SQL_CALC_FOUND_ROWS つかってもいいかもしれないんだけど、いつそのプロダクトを他人がメンテするようになって、何も考えないでうっかり使っちゃだめな所にコピペするか分からないので、結局は業務で SQL_CALC_FOUND_ROWS を使わないのが正解
Ryuta Kamizono @kamipo 2014-03-11 21:22:10
確かめないで言ってるけど、例えば1行がテキスト数百文字ぐらいのでかいテーブルで参照に偏りがある(最近の行にしかほぼ参照が行かない)場合、ORDER BY狙いのインデックスで必要な行だけ取ってきてCOUNTはカバリングインデックス狙ったほうがバッファが汚れなくていいと思う。
大沢和宏 @Yappo 2014-03-11 21:24:46
ああ、この senna のぱっち SQL_CALC_FOUND_ROWS とか LIMIT OFFSET なページングするな。の理由全部説明できてるな
大沢和宏 @Yappo 2014-03-11 21:28:56
ちなみに WHERE id > ? ORDER BY id LIMIT ? な感じのクエリをはける感じの UI 設計をするとスケールするのでおすすめですよ
大沢和宏 @Yappo 2014-03-11 21:31:25
ミドルウェアで実装されてる機能はなるべく開発しゃとかみんなが使ってるもので、必要最小限にすると安定するっていうの Senna と Q4M が僕に教えてくれた
残りを読む(1)
ログインして広告を非表示にする
ログインして広告を非表示にする