5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

SQLite 9

1 :NAME IS NULL:2011/02/27(日) 01:22:40.55 ID:???
サーバの要らない軽量データベース SQLite についてのスレです。

SQLite Home Page
http://www.sqlite.org/

613 :NAME IS NULL:2011/11/07(月) 23:01:43.58 ID:???
2万件くらい入ってるテーブルをselectして100〜200件位を取得しているのですが、
iPhone3GSで大体0.05〜0.1秒かかっています。
これをせめて0.01秒くらいまでチューニングしたい。

create table TBL_A (
COL_A INTEGER NOT NULL
, COL_B INTEGER NOT NULL
, COL_C INTEGER NOT NULL
, COL_D INTEGER NOT NULL
, COL_E INTEGER NOT NULL
, COL_F INTEGER NOT NULL
);
create index IDX_A on TBL_A(COL_A, COL_C, COL_B, COL_D);

select COL_A, COL_B, COL_C, COL_D, COL_E
from TBL_A
where COL_A <= 200
and COL_B >= 100
and COL_C <= 4000
and COL_D >= 3000
;

explain で確認すると
6 OpenRead 0 49 0 9 00
7 OpenRead 1 1323 0 keyinfo(4,BINARY,BINARY) 00
とあるので、キー読みは出来ているのではないかと思うのですが、
そもそも読み方が良く理解出来ていないのかもしれません。

インデックスを COL_A, COL_B, COL_C, COL_D や COL_C, COL_D, COL_A, COL_B、
それぞれ1列ずつ4つ作ってみたりしてみましたが今より遅くなってしまいました。

あと、何か検討出来ることはあるかしら?

614 :NAME IS NULL:2011/11/08(火) 00:08:51.44 ID:???
>>613
条件式の並べ替えかな。
結果が少なくなりそうな順序がわかれば少し高速化できるはず。

615 :NAME IS NULL:2011/11/08(火) 00:10:18.32 ID:???
たとえば、COL_D >= 3000 でばっさり300件くらいに絞れるとか
そんな都合のいい条件があれば、それを最初にするといい。

616 :613:2011/11/08(火) 00:43:27.53 ID:???
>>614さん、レスありがとう御座います。

COL_A〜COL_Dはそれぞれ均等に分布していて、条件の数字は可変なんです。
なので COL_D >= 3000 では確かに300件くらいになるかもしれないのですが、
他のタイミングでは COL_D >= 300 とかになってしまうので、あまり効果が無さそうです。
後だし情報で申し訳ないです。

やっぱり2万件ってのと範囲指定で複数条件ってのが厳しいのかなぁ。

617 :NAME IS NULL:2011/11/08(火) 02:45:58.95 ID:???
ハードウェア的にはどれくらいの速度が期待できるの?
まさかそれも分からずに0.01秒くらいにならないかなぁーとか言ってるわけじゃないよね

618 :NAME IS NULL:2011/11/08(火) 03:21:48.58 ID:???
>>617
0.01秒くらいは普通に見込める。
ていうかiPhone3GSって書いてあんだし手元で試せるだろ。

619 :NAME IS NULL:2011/11/08(火) 04:53:55.74 ID:???
手元にないけど、手元で試せるなら速度でてるってことで万々歳じゃね?

620 :NAME IS NULL:2011/11/08(火) 20:20:51.50 ID:???
データベースの物理サイズを数メガに分割すると速い。

621 :NAME IS NULL:2011/11/09(水) 02:01:39.45 ID:???
kwsk

622 :NAME IS NULL:2011/11/09(水) 03:06:39.33 ID:???
>>618が試してくれりゃあいいんだけどな。
てか、回答もしてやれよと思うわ

623 :NAME IS NULL:2011/11/10(木) 02:28:33.49 ID:soAweL/z
最近のsqlite3のコマンドプロンプトでは、UTF-8の文字を入力してもビット落ちしてしまうんですけど、この問題に遭遇して解決された方はいませんか?


624 :NAME IS NULL:2011/11/10(木) 02:45:58.36 ID:???
BASE64エンコードなど

625 :NAME IS NULL:2011/11/11(金) 21:04:50.48 ID:???
おらくるPさん…ハァハァ

626 :NAME IS NULL:2011/11/13(日) 21:10:38.54 ID:???
TEXT型のフィールドに0001と入れると1になってしまいます。
仕様ですか?

627 :NAME IS NULL:2011/11/13(日) 22:00:04.44 ID:???
0001を入れたのか"0001"を入れたのかどっちなんだ

628 :NAME IS NULL:2011/11/13(日) 22:03:46.28 ID:???
>>627
Navicat for SQLiteでテーブルを開いた状態で入れました

どっちになるんでしょう

629 :NAME IS NULL:2011/11/13(日) 22:10:09.08 ID:???
>>628
Navicatのサポートに聞け。

630 :NAME IS NULL:2011/11/15(火) 08:31:49.33 ID:bVKL53qp
メインスレッドでINSERT発行し続けて、
別スレッドでたまにCOMMITするとどうなりますか?

つまりメインで
BEGIN TRANSACTION
INSERT
INSERT
...
BEGIN TRANSACTION
INSERT
INSERT
...

をやっていて、
あるトランザクションでINSERTが出揃った時点で
別スレッドでCOMMITすると、次のトランザクションが(メインで)開始してしまいますが、
ロックされてINSERTできない、みたいなことになりますか?

631 :NAME IS NULL:2011/11/15(火) 18:38:30.00 ID:???
自分で試せ

632 :NAME IS NULL:2011/11/15(火) 19:34:21.82 ID:3Q3XMG+/
BEGIN TRANSACTION tran1
処理a
BEGIN TRANSACTION tran2
処理b
COMMIT TRANSACTION tran2

COMMIT TRANSACTION tran1

↑こーゆー感じで実行すると、
COMMIT TRANSACTION tran2 の時点で処理aと処理bがCOMMITされちゃうんですが、
処理bだけCOMMITしたいときはどうすればいいんでしょうか??

633 :NAME IS NULL:2011/11/16(水) 12:18:12.64 ID:???
ここの荒らしさんも報告したら規制対象にいれてくれるの?

634 :NAME IS NULL:2011/11/16(水) 12:40:40.14 ID:???
ここで聞かれても困ります
http://www.2ch.net/accuse2.html
を見てください

635 :NAME IS NULL:2011/11/16(水) 14:24:36.91 ID:???
>>632
begin;
savepoint tran2;
release tran2;
commit;

636 :NAME IS NULL:2011/11/27(日) 01:31:12.61 ID:???
話題無い時は本当に無いな。
一応の保守。

637 :NAME IS NULL:2011/11/28(月) 03:26:17.05 ID:c+RTLTZb
あったああ

638 :NAME IS NULL:2011/11/29(火) 06:03:53.66 ID:PoYxGkxU
10万件男の話なんだけど、これ本当に起こっているなら、原因はサイズです。
データベースが一つのファイルで構成されている関係上、性能が劣化しやすいんです。
ここら辺はベンチとればすぐわかります。
プラットフォームの性能で変わるので一概に言えないのですが、個人的に10GBを
一つの目安としています。
64ビットのOSでは制限が緩くなる可能性があります。
ファイルサイズとメモリーの関係について文書が用意されていたはずです。

BLOBに写真を突っ込むような使い方をする場合、設計をよく考えなければなりません。

639 :NAME IS NULL:2011/11/29(火) 09:11:36.55 ID:???
ネタにマジレスすんなよ

640 :NAME IS NULL:2011/11/29(火) 20:41:37.76 ID:???
データ型TEXTのフィールドに、改行を含んだ文字列を書き込みたい場合、
SQL文はどのように書けば良いのでしょうか?
どなたかアドバイスを頂けると助かります。
よろしくお願いいたします。

641 :NAME IS NULL:2011/11/29(火) 20:50:37.60 ID:???
念のために聞くが、SQLiteの話だよな?

642 :NAME IS NULL:2011/11/29(火) 22:21:28.78 ID:???
>>641
はい、そうです。

643 :NAME IS NULL:2011/11/29(火) 23:12:53.22 ID:???
何が聞きたいのかさっぱり分からん。

SQLiteは改行を含む文字列がTEXT型フィールドに入れられるか、という質問?
 →だとしたらYES。普通のinsert文でOK。

TEXT型フィールドに改行を含んだ文字列を入れたらエラーになったが、どうすればいいか、という質問?
 →だとしたら問題のSQL文を書くこと。

SQLiteに限らず、SQL文全般の質問
 →だとしたらスレ違い。

644 :NAME IS NULL:2011/11/30(水) 16:53:31.12 ID:???
sqliteのコマンドラインツールから操作するときの話じゃね?

645 :NAME IS NULL:2011/11/30(水) 19:56:20.49 ID:???
自演っぽい

646 :NAME IS NULL:2011/11/30(水) 20:07:00.64 ID:???
っぽいというか。

647 :NAME IS NULL:2011/11/30(水) 21:27:01.26 ID:???
テーブルで初期に設定したフォーマットを出力するにはどうしたら良いですか。

648 :647:2011/11/30(水) 21:32:13.02 ID:???
自己解決しました

649 :NAME IS NULL:2011/11/30(水) 23:11:57.74 ID:???
>>633
>>644
そうそのコマンドラインツールでの話です(^_^;)
コマンドラインでテキストを挿入する際、
改行コードを入れるにはどうするのでしょうか?

650 :649:2011/11/30(水) 23:14:04.33 ID:???
>>649アンカミスしました。
>>633 でなく>>643 です。


651 :NAME IS NULL:2011/12/01(木) 00:10:10.20 ID:???
>>650
普通に改行すれば改行コードごと入るけど馬鹿なの?

652 :NAME IS NULL:2011/12/01(木) 00:28:19.05 ID:???
>>651
ありがとう
正に馬鹿でした

653 :NAME IS NULL:2011/12/02(金) 02:48:33.94 ID:???
皆様にはくだらない質問でしょうが聞いてください。
あるテーブルのある列を集めて別のテーブル(ビュー)を作るのがリレーショナルデータベースだと分かりました。
では、そのビュー(テーブル)自体を一つのレコードとして集めたテーブルを作るのはリレーショナルデータベース
ではどうするのでしょうか?
例えば、十月売上品テーブルを作るのにメーカーテーブルや色テーブルから列を集めたのですが、
その売上品テーブル自体を一レコードとする年間売り上げ品テーブルを作るには
どうしたら良いのでしょうか?

654 :NAME IS NULL:2011/12/02(金) 03:07:08.58 ID:???
group byしてsumする

655 :NAME IS NULL:2011/12/02(金) 22:07:59.97 ID:???
以下のような状態でprimary keyに対してlike演算子を使用したのですが
検索が非常に遅くなっています
これをはやくする方法はないでしょうか

create table dictionary(spell text primary key, content text);
select * from dictionary where spell like 'run%'

656 :647:2011/12/02(金) 22:24:04.54 ID:???
フルテキストインデックスを利用する

通常は、Like演算子を使って検索するが、この方法で結果を得た場合にデータ量によっては、数分程度の検索時間になることがある。

http://blog.livedoor.jp/akf0/archives/51005817.html

657 :NAME IS NULL:2011/12/03(土) 00:51:00.50 ID:???
>>653-656
ここはSQLiteのスレであって、SQLの文法相談所ではない。

 SQL質疑応答スレ 12問目
 http://hibari.2ch.net/test/read.cgi/db/1316769778/

こっちへ。

658 :NAME IS NULL:2011/12/03(土) 01:26:01.33 ID:???
>>656
それ SQL Server の記事みたいだけど SQLite でも使えんの?

659 :NAME IS NULL:2011/12/03(土) 01:56:11.79 ID:???
SQLiteの全文検索を使ってみる
http://blog.mwsoft.jp/article/34911345.html

SQLiteで全文検索 - DiaryException
http://d.hatena.ne.jp/LaclefYoshi/20110604/1307175819


660 :NAME IS NULL:2011/12/03(土) 09:35:35.30 ID:???
>>654
ありがとうわかった気がします。

661 :NAME IS NULL:2011/12/03(土) 18:27:36.55 ID:???
>>657
おもしろいな

662 :NAME IS NULL:2011/12/12(月) 12:58:12.11 ID:yToQ1TQG
ためになったよ

145 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)