のんびり精進

調べた情報などをおすそ分けできれば。

DB

Dart/FlutterのローカルDBの比較

モバイル以外にも対応したローカル DB を使いたかったので、複数のパッケージを調べてみました。 Hive を特に詳しく調べたため、そこだけ情報量が多めです。 2022年12月補足(結論) 記事を書いたときは Isar に注目していましたが、現在は Drift に落ち着き…

こんなデータベース用ライブラリを誰か作ってほしい(Go)

Go DB

Go2 Advent Calendar 2019 の 6 日目の記事です。 Go の database/sql って使いにくくないでしょうか。 二年ちょっと前にもっと楽にできないかなと思って調べました。 欲しかったもの database/sql を使いやすくしたもの ORM は要らない ただし、SELECT と I…

【SQLite/MySQL】グループごとの上位N件ずつを取得

MySQL でグループごとに上位のN件ずつを取得する方法は以前に書きました。 kabochapo.hateblo.jp サーバサイドの MySQL はこれで解決しました。 しかし、スマホアプリ側で似たテーブル構成にしておいて同様のクエリを使いたくてもできません。 そこで、Andro…

【Android / iOS】スマホOSとSQLiteのバージョン対応

スマホアプリ内のデータベースと言えば、SQLite を使うことが多いと思います。 自作のアプリでも SQLite を使っていましたが、非常にシンプルなクエリのみでした。 そのためあまり気にしていなかったのですが、新たなアプリで少し複雑なクエリが必要になって…

【MySQL】グループごとの上位N件ずつを取得

Window 関数を使う方法 MySQL 8.0.2 で導入された Window 関数をまず使ってみます。 参考にしたのは次のページです。 「ROW_NUMBER() - Oracle, SQL Server and PostgreSQL」と書かれているので MySQL 以外でも共通で使えるはずです。 www.sqlines.com SELEC…

【MySQL】NOT EXISTSのサブクエリでOR条件を指定すると遅い

3年以上前に Twitter にメモ的に書いたものなのですが、忘れたときに遡って探し出すのが大変なのでこちらに再メモ。 SELECT * FROM tb1 WHERE NOT EXISTS ( SELECT * FROM tb2 WHERE tb2.col1 = tb1.col OR tb2.col2 = tb1.col ); くっそ遅くて、実行計画を…

【Go】gorp でプレースホルダを使う

Go DB

テーブルは前回の記事のものを引き続き使用することにします。 kabochapo.hateblo.jp 値を SQL 文中に直書き rows, err := dbmap.Select(User{}, `SELECT id, name FROM user WHERE id IN (1, 3)`) プレースホルダ rows, err := dbmap.Select(User{}, `SELEC…

【Go】gorp を使って DB 操作を少し楽にする

Go DB

github.com gorp の気に入ったところ ORM は便利ですが、私は SQL 文を書いてパフォーマンスを調整したいので、ORM のためのパッケージだと自分の使い方に合いません。 その点で gorp は合格でした。 "an ORM-ish library" とのことで、がっつり ORM ではな…