タグ

SQLに関するikebeのブックマーク (16)

  • 漢(オトコ)のコンピュータ道: InnoDBでCOUNT()を扱う際の注意事項あれこれ。

    InnoDBを使うとき、MyISAMと比較して度々やり玉に挙げられるポイントとして「COUNT()が遅い」というものがある。確かにInnoDBにおいて行数を弾き出すのにはテーブルスキャンが必要なのだが、そもそもMyISAMのCOUNT()が速い(テーブルの行数を保持してる)のが特殊なのであって、InnoDBが遅いわけではないのである。とはいえ、高速なCOUNT()については需要が多く、この問題には多くの人取り組んでおられるようだ。しかしながら、COUNT()のチューニングについては未だ語られていない点があるように見受けられるので、今日はCOUNT()のチューニングについて解説しようと思う。 COUNT(*)、COUNT(col)、COUNT(1)の違い基的なことではあるが、COUNT(*)とCOUNT(col)では意味が異なるため、異なる結果が返される場合がある。COUNT(*)はフェッ

    漢(オトコ)のコンピュータ道: InnoDBでCOUNT()を扱う際の注意事項あれこれ。
  • ウノウラボ Unoh Labs: RDBで階層構造を扱うには?

    yukiです。ダイエットを始めて3kg減ったと思ったら、風邪を引いて見事に1kg増量。 運動しないと駄目ですね。あと残り20kg、道のりは遠いです。 さて今回は、「RDBで階層構造を扱うには?」です。 あるサイトを構築中に階層構造をもったカテゴリ構造にすることになり、どのようにDBで扱うか悩みました。 DBMySQLを採用していたので、この時点でぱっと頭に浮かんだ選択肢は以下のようなものでした。 XML-DBを利用する 親カテゴリレコードのプライマリIDを子カテゴリレコードに持たせる 親を含めた『絶対パス』を名称として扱い、取り出した後にパース ファイルシステムに同様のディレクトリ構造を作り、毎回パースする (1)のXMLDBはオープンソースのeXistやXindice、Yggdrasillなど様々な選択肢がありましたが、カテゴリのみの利用な割にメンテナンスコストが高すぎるので見送りま

  • ALTER TABLEを上手に使いこなそう。

    テーブル定義を変更したい。インデックスが壊れてしまったので再作成したい。そんな場合はALTER TABLEを使う。ALTER TABLEはテーブル定義を変更するお馴染みのコマンドであるが、その挙動は意外と知られていない。(エキスパートとおぼしき方々からも度々質問を受ける。)そんなわけで、今日はALTER TABLEについて解説しようと思う。 まず結論から言うと、なんとMySQLのALTER TABLEはテーブルのデータを全てコピーし直すのである。なんて無駄なことを!?と思うかも知れないが、テーブル定義(スキーマ)の変更を動的に行うには、ストレージエンジンによるサポートが必要であり、動的なスキーマ変更をサポートしているストレージエンジンはまだ少ないのである。(動的スキーマ変更をサポートしているのはMySQL Clusterぐらいだ。しかも追加だけ。)デフォルトで利用出来るMyISAMはInn

    ALTER TABLEを上手に使いこなそう。
  • hide-k.net#blog: Kazuho式フレンド・タイムライン実装をDBICで表してみた

    Kazuho@Cybozu Labs: フレンド・タイムライン処理の原理と実践 奥さん人の中でブームが去った感もあるRDBMSで実現するフレンド・タイムライン処理ですが、そういえばDBICで使ってみたのを思い出したので晒してみます。 要はDBICからストアドプロシージャの叩き方を知りたかっただけなんですけどね。 パッケージ名はWebインターフェースはどーせCatalystで作るでしょってことでCatalyst + Twitter = Catatter…って安直なネーミングですね。 記事中ではプッシュ型とプル型が紹介されているのですが、データ量やfollow, removeの際のコストとか考えたらプル型の方が好みかなってことでプル型を採用してみました。 また、基的にスキーマやストアドプロシージャはオリジナルと同じですが、DBICでPKをマルチカラムにするとめんどっちーのでサロゲートキーを

    ikebe
    ikebe 2008/07/01
  • Kazuho@Cybozu Labs: フレンド・タイムライン処理の原理と実践

    « MySQL のクエリ最適化における、もうひとつの検証方法 | メイン | MySQL (InnoDB) に直接アクセスしてタイムライン処理を高速化する話 » 2008年06月09日 フレンド・タイムライン処理の原理と実践 MySQL (InnoDB) に直接アクセスしてタイムライン処理を高速化する話に続きます。 Twitter が注目されるようになって久しい今日この頃ですが、友人の投稿を時系列に並べて表示する、というのは、Twitter に限らず Mixi の「マイミクシィ最新日記」やはてなブックマークの「お気に入り」等、ソーシャルなウェブサービスにおいては一般的な手法です。ですが、この処理 (以下「フレンド・タイムライン」と呼ぶ) は、一見簡単そうに見えて、実装には様々な困難が伴います。記事では、「フレンド・タイムライン」を実現する、プッシュ型とプル型の二種類の手法について、その原

  • SQL::AbstractとMySQLのFulltext Search - D-6 [相変わらず根無し]

    SQL::AbstractとMySQLのFulltext Search DBIx::Class経由でSQL::Abstractを使っているわけですが、このたびPostgreSQLからMySQLに引っ越ししようかと思ってるサービスがありまして、そこで問題にぶち当たりました。 Ludia(PostgreSQL)の場合は対象のカラムに対してオペレーターをかますので、column => { '@@' => '*D+ ....' } (新しいLudiaは%%か)とかできるわけですが、MySQLの場合はMATCH(...) AGAINST(...)を使うので カラム→オペレーター→引数という形にできない。 もちろん 'MATCH(...)' => \'AGAINST(...)'ってやってもいいんだけど、なんかわかりにくい気がしてた。 で、色々考えた末、これが俺の中で一番きれいという判断となった $sq

    ikebe
    ikebe 2008/05/10
    悩みどころだけど、なるほど見やすい
  • ORDER BY RAND()

    If you read the MySQL manual you might have seen the ORDER BY RAND() to randomize the the rows and using the LIMIT 1 to just take one of the rows. This example works fine and is fast if you only when let's say 1000 rows. As soon as you have 10000 rows the overhead for sorting the rows becomes important. Don't forget: we only sort to throw nearly all the rows away. I never liked it. And there are b

    ikebe
    ikebe 2007/05/29
    ORDER BY RAND() の代替
  • INSERT ON DUPLICATE KEY UPDATE and REPLACE INTO

    Jonathan Haddad writes about REPLACE INTO and INSERT ON DUPLICATE KEY UPDATE. Really, Why MySQL has both of these, especially both are non ANSI SQL extensions ? The story here seems to be the following – REPLACE INTO existed forever, at least since MySQL 3.22 and was a way to do replace faster and what is also important atomically, remember at that time MySQL only had ISAM tables with table locks

  • many-to-manyを殴り書き - Hatena::Diary::Neko::kak 500 Internal Server Error

    今のところ、あまり必要に迫られているわけではないのですが、 覚書程度にDBICのmany-to-manyを試してみます。 Memberテーブル:Addressテーブル = n : m みたいなな感じで。 package Proj::Schema::Member; use strict; use warnings; use base 'Proj::Schema'; __PACKAGE__->table('member'); __PACKAGE__->add_columns(qw/ id rid name created_on timestamp /); __PACKAGE__->set_primary_key(qw/id/); __PACKAGE__->has_many('member_address' => 'Proj::Schema::MemberAddress','member');

    many-to-manyを殴り書き - Hatena::Diary::Neko::kak 500 Internal Server Error
    ikebe
    ikebe 2006/11/16
  • Tags: Database schemas

    An online tech community is the most exciting place for a software developer to spend their time. It not only offers the chance to work and interact remotely, but also helps in honing one’s own skills and becoming a well-rounded programmer. Whether you are a budding software developer or simply passionate about technology, here are the best online software development communities you can join. The

    ikebe
    ikebe 2006/11/16
  • Page not found – joinfu

    404 Oops! That page can’t be found. Go back to the homepage. Homepage

  • Tags and search and DBIx::Class

    Update: Advanced Search in web DBIx::Class based applications (with tags, full text search and searching by location) is a more elaborated version of this article. Some time ago I had an idea for a bookmarking site - nothing really revolutionary, but with an effective interface. I've decided that it needs to combine search, browsing by tags and other properties, ordering and jumping to pages. I ha

    ikebe
    ikebe 2006/10/30
  • RDB の FTS 拡張

    2006-10-02 近況 sqlite を眺めていたとき私がもともと何をしていたかというと, RDB への全文検索(Fulltext Search: FTS)をつなぎ方を探していた. flino で使った HSQL は FTS に対応していない. 以前 Lucene あたりを繋げないものかとコードを覗いたけれど, 敷居は高そうだった. (Java のくせに sqlite より modular でない気がする.) よく見ると HSQLBLOB にも対応していない. 結局ファイルと Lucene をアプリケーション側で管理している. いまいち. で, 今回はそのリベンジを目論んでいたのだった. (結局 sqlite をいじっているうちにストレス解消は完了.) 世の中を眺めてみると, RDB に FTS を繋ごうとする試みは多い. MySQL や PostgreSQL は FTS に対応

  • http://www.res-system.com/item/550

  • WWW SQL Designer

    What's new? 25.9.2008 Version 2.2 SQLite storage New datatypes New translations 18.7.2008 Version 2.1.1 Fixes in MySQL XSLT Minor improvements 28.6.2008 Version 2.1 New languages Dynamic window title "note" datatype attribute 1.4.2008 Version 2.0.1 Fixed AUTOINCREMENT for Foreign Keys Minimap visual aesthetic changes 28.3.2008 Version 2.0 ! Thanks to Mirko Buffoni for numerous consultations and su

    ikebe
    ikebe 2005/10/04
    スゲー
  • Open Alexandria-オープンソース・ソフトウェアを紹介

    Get your song commercially competitive and ready for the world to hear! Send me your song and I’ll provide you with a free test master!

    Open Alexandria-オープンソース・ソフトウェアを紹介
    ikebe
    ikebe 2005/03/29
  • 1