トップページDB@2ch掲示板
1002コメント312KB
SQLite Part.10
■ このスレッドは過去ログ倉庫に格納されています
0580NAME IS NULL
垢版 |
2017/01/07(土) 21:29:52.61ID:???
>>578
In の右辺が select なら exist に。そうでないなら素直に and と or 使いなされ。

>>579
A にも B にも現れない文字を区切りに使えるならいいけど、単純に連結するのは NG
0583NAME IS NULL
垢版 |
2017/01/08(日) 08:53:31.25ID:???
>>579, 580
やり方色々あるんですね。
とても参考になりました。
ありがとうございます。


ところで、

>> In の右辺が select なら exist

って具体的にはWHERE句にどう書くのでしょうか?
0584NAME IS NULL
垢版 |
2017/01/08(日) 11:26:10.96ID:???
SELECT * FROM HOGE
WHERE EXISTS(SELECT * FROM FUGA WHERE HOGE.A = FUGA.A AND HOGE.B = FUGA.B)
0585NAME IS NULL
垢版 |
2017/01/09(月) 12:41:36.74ID:???
>>584
コード、ありがとうございました!
さっそくやってみます。
0587NAME IS NULL
垢版 |
2017/02/08(水) 09:16:30.67ID:ib/65+FH
explainの見方がよくわからないのですが、
よくわからない人は、どこ見てそれがいいSQLであると判断すればいいですか?
ステップ(addr)の数が少なければ少ないほどいいってことでしょうか?
アプリケーションから実行速度を測る事はできるのですが、
純粋なSQLの実行速度を知りたいのですが、何か方法ありますか?
0588NAME IS NULL
垢版 |
2017/02/08(水) 12:43:05.00ID:???
複数行insertでprepared statementを使おうとしたら999制限に引っかかって挿入出来ません
何か良い解決策はありませんか?
0589NAME IS NULL
垢版 |
2017/02/08(水) 14:08:11.63ID:???
SQLITE_LIMIT_VARIABLE_NUMBER 変更するとか?
0592NAME IS NULL
垢版 |
2017/03/18(土) 06:19:56.54ID:???
SQLiteに保存する文字コードは、UTF-8が基本ですか?
SJISを保存すると問題おきますでしょうか?
0594NAME IS NULL
垢版 |
2017/04/11(火) 17:38:40.65ID:???
SQLiteにSJISで保存すると何か問題が起きるんですか?
ホントなら具体例を教えてください。
0596NAME IS NULL
垢版 |
2017/05/24(水) 07:42:43.39ID:???
>>592
DBのエンコーディングがutf8かutf16ってだけで
同じテーブルに別々の文字コード入れようがsjisで格納しようが別に不具合は起きない
当然そのままだと文字化けを起こす可能性があるが
それをどうするかはアプリケーション側の問題
0597NAME IS NULL
垢版 |
2017/05/24(水) 21:23:46.06ID:???
>>596
LIKE演算子でちゃんと「%」を「%」と認識してくれるか、とか心配だが
大丈夫なのかな。
0598NAME IS NULL
垢版 |
2017/05/25(木) 10:39:50.92ID:???
どのDBもクライアントのエンコーディングは意識しないとだけど
それはDBのエンコーディングとは別の話
0599597
垢版 |
2017/05/25(木) 18:32:52.30ID:???
>>598
ごめんちょっと言い方が足りなかった。

マルチバイト文字列のSQL文を、DB側が正しく構文解析してるれるかなぁ・・・という質問でした。
たとえば、SELECT... WHERE xxx like '〇〇〇%';
というSQL文の場合、「〇〇〇」を正しく解釈し、次の文字の「%」を認識してくれるのかなぁという心配です。
〇がどんなマルチバイト文字でも大丈夫なのかな?
0600NAME IS NULL
垢版 |
2017/05/25(木) 18:44:27.94ID:???
うーん、、そのつもりで答えたんだけどな
クライアントの環境によるだろうけど、固定文字コードかロケールで切り替えるようになってるはずで
そのコードに沿ってないとSQL解釈も期待どおりにならない可能性はあるね
0601NAME IS NULL
垢版 |
2017/05/25(木) 18:47:20.11ID:???
ちなみにクライアント側が文字コードあってれば
サーバの文字コードに変換するのはクライアントの役目
通常サーバ側の文字コードはクライアントから切り替えられるようになってるので問題ないが
SQLiteの場合サーバ側の処理もクライアントがやるからそれだけ合わせとけばいいかと
0604NAME IS NULL
垢版 |
2017/06/09(金) 19:27:52.36ID:HI+OVZBi
日本と海外のユーチューバーは収入の仕組みが違う?!どっちが儲かるか?
http://youtube-youtuber.com/360.html

日本の従来型のユーチューバーは、広告収入をメインの収入源としています
1.動画にのせる広告(動画広告+画像広告)からの報酬や
2.スポンサー収入(企業からの依頼を受けて商品を紹介)

海外のユーチューバーの傾向として、広告収入ではなく、自分のビジネスを
メインにすることによって広告収入を遥かに超える収入を叩き出しています。
例えば、beauty guru(美のカリスマ)と謳われる、ユーチューバーのミシェル・ファンは
広告収入は1800万得ていますが・・他方で美容化粧品会社Ipsyを立ち上げて、
年収1億ドル(約110億円)を売り上げました。
彼女は「メイクのチュートリアル動画」を投稿していますが、動画の中で自分の会社の商品を
使っているんです。
そしてその中で使った商品を、online shopで買える仕組みにしています。
他人の商品を紹介して、そこから「おこぼれ」を貰うより、自分の商品を売った方が
遥かに儲かりますからね。

リンジー・スターリングは踊りながら、バイオリンを演奏する、アーティストですが・・・
彼女の場合も、あくまでも動画を投稿するのは、自分のビジネスである、
ツアーチケットやアルバムの販売のためなのです。
0605NAME IS NULL
垢版 |
2017/06/18(日) 17:51:34.06ID:???
ついにV4が来てしまったようだな。
これでDB界のパワーバランスが変わる。
0606NAME IS NULL
垢版 |
2017/06/18(日) 19:16:36.85ID:???
え?
まだ3.19じゃないの?
0608NAME IS NULL
垢版 |
2017/06/18(日) 22:08:31.74ID:???
(゚∀゚ 三 ゚∀゚)、
0609NAME IS NULL
垢版 |
2017/06/21(水) 22:57:56.93ID:4A99RJhE
>>605
おぉ!
0610NAME IS NULL
垢版 |
2017/06/22(木) 04:27:42.58ID:???
よしオラクルを空売りしよう!
0611NAME IS NULL
垢版 |
2017/06/22(木) 23:52:30.19ID:???
4だとZIPVFSが無償で使えたりしないかなw
0612NAME IS NULL
垢版 |
2017/06/23(金) 20:53:47.60ID:???
numeric 型が気になるなぁ
0615NAME IS NULL
垢版 |
2017/07/08(土) 09:01:20.67ID:P1W8iwhy
>>605
ストアドプロシージャとか使える?
0617NAME IS NULL
垢版 |
2017/08/11(金) 08:00:27.63ID:???
ファイルシステムよりも35%高速に
ttp://postd.cc/faster-than-fs/
0619NAME IS NULL
垢版 |
2017/08/29(火) 18:43:15.91ID:???
sqliteだと、managementstudioみたいなツールは何が使い勝手いいですか?
0620NAME IS NULL
垢版 |
2017/08/29(火) 21:14:17.01ID:OhjuD9IQ
>>619
何年か前にフリーのを一通り試したときは
結局Firefoxのアドオンのやつがよかった
0621NAME IS NULL
垢版 |
2017/08/29(火) 22:18:32.51ID:???
>>620
アドオンすか・・インストール型とかイメージしてました
0622NAME IS NULL
垢版 |
2017/08/29(火) 22:18:48.87ID:???
>>620
アドオンすか・・インストール型とかイメージしてました
0623NAME IS NULL
垢版 |
2017/08/29(火) 23:12:13.61ID:???
SQLiteStudioまあまあ
SQLite以外を扱う必要がなければ十分
見た目もManagement Studioに近い
0624NAME IS NULL
垢版 |
2017/08/31(木) 13:06:37.85ID:FED7sUEP
いるいるいるよね貝社員
0626NAME IS NULL
垢版 |
2017/09/21(木) 14:38:04.47ID:CPk5Opit
MATCHだけど
SELECT * FROM vtbl AS v WHERE v MATCH 'foo';
だとvなんてカラムねーよとエラーになる
SELECT * FROM vtbl WHERE vtbl MATCH 'foo';
ならOK
なんか納得いかない

vtblはvirtual tableです
0627NAME IS NULL
垢版 |
2017/10/02(月) 01:35:45.11ID:???
MATCHで指定するのはテーブルじゃなくてカラムだと思うんだが
0634NAME IS NULL
垢版 |
2017/11/08(水) 15:34:14.65ID:???
>>633
肝心なところが引用できてないぞ
0635NAME IS NULL
垢版 |
2017/11/08(水) 15:47:10.99ID:???
君が肝心と思ったところは君が引用すればいいと思うよ
0636NAME IS NULL
垢版 |
2017/11/08(水) 15:47:57.57ID:???
SQLite4は元々リリースするつもりは無かったのか?
0639NAME IS NULL
垢版 |
2017/11/11(土) 20:56:08.93ID:???
初歩的な質問なのですが、
SQLiteのテーブルにboolean型のカラムを作って
C#のプログラム側から参照してbool型の変数に代入しようとすると
型が違うと怒られます

sqliteのboolean型はbool型に入れられないのでしょうか
0640NAME IS NULL
垢版 |
2017/11/11(土) 21:23:40.52ID:???
>>639
sqliteのboolean型はint型じゃないのかな。
intでバインド
0641NAME IS NULL
垢版 |
2017/11/11(土) 21:46:12.74ID:???
>>640
ありがとうございます
C#側でint型変数に代入を試みたところ0 1で値が入りました
0643NAME IS NULL
垢版 |
2017/11/11(土) 22:08:14.79ID:???
>>642
ありがとうございます
読んでみます
0644NAME IS NULL
垢版 |
2017/11/18(土) 01:48:42.44ID:F7zPqW66
>>636
元々実験バージョンだったはず
0645NAME IS NULL
垢版 |
2017/11/18(土) 12:09:57.30ID:???
なんのための実験?
0646NAME IS NULL
垢版 |
2017/11/24(金) 19:36:24.57ID:???
質問です。
ATTACHをすると異常に遅くなるのですが、これは最新バージョンで直ってますか?
或いは何らかの対策がありますか?

[環境]
PHP7.1.8+SQLite3.15.1(今年9月時点でのxampp最新版)
SQLite3.21.0のDLLをDLして差し替えたが動作せず

[状況]
・openよりもattachの方が優先順位が低いのか、追い越されている時がある。
・基本的にシーケンシャルにリクエストをしている。
(30秒ごとにキューに溜まったリクエストを順次送信する。
前リクエストの結果を受け取ってから0.1秒待って次リクエスト発行、これでシーケンシャル。
ただし30秒でキューが掃けない場合、上に被せるので、一時的に2並列になるときがある。)
・連続した場合、2回目以降は早い(ことが多い)。1回目は6秒程度、2回目以降は0.1-0.2秒程度で終了する。
・Timeout設定は5秒だが25秒かかっても問題なく正常終了する(タイムアウトしない)
・用途は掲示板で、リクエストはスレ立て/投稿/閲覧/スレ落ちを混ぜてテスト中。
・試行錯誤した結果、ATTACHしただけで遅いようだと判明した(ATTACHしたDBを触らずとも遅い)

[推定]
連続した場合には早いので、EXCLUSIVEロック待ちだと推定している。
ただしリクエストはほぼ全部シーケンシャルなので、本来はロック待ち自体がおかしい。
なお以下仕様のため、sqlite_masterの合成に時間がかかっているのか?とも思い、
全部mainをつけてみたが変化なし。(連続した場合に早いのでこの線もおかしいが)
> If the name of the table is unique across all attached databases and the main and temp databases, then the schema-name prefix is not required.
> http://www.sqlite.org/lang_attach.html

今のところ納得できる理由(原因)が見つかっておらず、対策が出来ていません。これについて、
対策方法(最新バージョンで直っているのならそれでよし)をご存知であればご教授ください。

最新版をPHPで試す方法はPHPのスレで聞いてみます。
0647NAME IS NULL
垢版 |
2017/11/25(土) 14:28:33.17ID:???
>>646
自己解決しました。

ATTACHの速度が対象DBのtable数にかなり依存するため、
ATTACHするとその場でsqlite_masterの合成をするのだと推定しました。
従って、ATTACH順を変更することにより改善できます。
今回は3つのDBを同時に扱うため、3C3の6通りでしかなく、速いのを選ぶことにしました。

なお、この実装がよいのかは若干疑問です。
通常はATTACH対象をさほどゴリゴリやらないので、
合成ではなく直列(カスケード)にして、その都度順に引いた方が速いと思われます。
或いは、合成/直列を選択するpragmaがあればよいのですが、これもないようです。
これらの問題のため、最新版等では改善している可能性もあります。(試せていません)

何か対応しようとしてくださった方が居ましたら、ありがとうございました。
0649NAME IS NULL
垢版 |
2017/11/25(土) 16:20:09.78ID:???
>>647
ついでに続報を言うと、
ATTACHが遅くなるのはシステムキャッシュが無効(容量が足りない)時だけのようです。
合成自体は十分速く、
断片化したDB内のsqlite_masterのHDDからの読み出しに時間がかかっているようです。
だからまあ、現在(SQLite 3.15.1)の実装で問題ない、ということにもなりますが、、、

私の環境では、
RAMに十分空きがある(システムキャッシュにヒットする)場合には、
ATTACHは0.04-0.06秒程度で終了します。
RAMを使い尽くしている(システムキャッシュに十分な容量がない)場合には、
ATTACHだけで2-6秒程度かかり、これはVACUUM等で改善します。
また、ATTACHの順番を変えると何となく雰囲気が変わります。
(ただしこの結果は少し矛盾してますが)
0650NAME IS NULL
垢版 |
2017/11/25(土) 16:21:49.63ID:???
わざわざATTACHする理由は
0651NAME IS NULL
垢版 |
2017/11/25(土) 17:33:35.10ID:???
>>650
DB間のデータ転送をtransactionで括るため
0652NAME IS NULL
垢版 |
2017/11/25(土) 17:54:56.49ID:???
>>651
ATTACHするDBは違うホストにあるって事?
2相コミットのかわり?
0653NAME IS NULL
垢版 |
2017/11/25(土) 18:59:03.84ID:???
>>652
> 2相コミット
なんだこりゃ?Wiki読んだが何に使うのかよく分からん。
分散掲示板という意味なら面白いと思うし一部に待望されているが、俺が今作っているのはこれではない。
DBは同一ホストにある。

単にSQLiteの性能を出すために適宜DBを分割しているだけ。
というか、ロック単位がDBだから、平行させるためには分割するしかなく、そうしてるだけ。
(テーブル単位でロックできる他DBなら分割する意味はない)
例えばtech板なら、
「スレ本体(tech.live)」「スレヘッダのみ(全板共通)(tags.db)」「スレアーカイブ(tech.archived)」にしてあり、
スレ落ち時に
・tags.dbからヘッダを消去
・tech.live->tech.archivedにスレ内容転記
・tech.liveからスレを消去
する為にこれら3つをトランザクションで括っている。
この間に別板のスレの読み出しは、例えばprog板ならprog.liveだけで完結するのでブロックされない。
書き込みは全板共通のtags.dbによってブロックされてしまうが、これは仕様上致し方なし。
掲示板なので読み出し性能重視でこの設計にしている。
0654NAME IS NULL
垢版 |
2017/11/25(土) 19:07:59.44ID:???
>>653
2相コミットってSQLiteにあったのか
侮れんな

そんな面倒なことするのなら他のDBMSで良いんじゃね? とは思うけど
SQLiteじゃなきゃ駄目な理由があるんでしょうな
0655NAME IS NULL
垢版 |
2017/11/25(土) 19:18:27.38ID:???
>>654
複数DBのトランザクションという意味なら、それは追加されたらしい。
いつからかは知らん。

> SQLiteじゃなきゃ駄目な理由があるんでしょうな
共用鯖上で、PCの知識がほぼ無いadminでも扱える掲示板を目指している。
そのデプロイの都合上、PHP+SQLiteだ。
上位版はNodeで用意する予定だが、こちらもSQLiteになる。
それ以上の上位版は、他に既に色々あるからそっち使え、で行く。
興味あるのなら以下を読んでくれ。
https://meguca.org/g/2724701
0656NAME IS NULL
垢版 |
2017/11/25(土) 19:32:02.29ID:???
そういえばSQLiteのmainデータベースの名前を変える方法知らないか?
ググったけどなさそうなんだが。

具体的には>>647を試したコードがmainが3種類必要で結果的に3つコピペしてありうざい。
(live,tags,archiveにすれば共通化できるが、どれかをmainにしないといけない縛りのため)
0657NAME IS NULL
垢版 |
2017/11/25(土) 19:40:25.85ID:???
>>655
DBエンジンのインストールや設定って素人は難しく感じるようですね。
SQLiteは1ファイルで独立エンジン不要なのでローカルDBに使う分には良いですわ。
0658NAME IS NULL
垢版 |
2017/11/25(土) 19:42:22.24ID:???
>>656
データベースのファイル名を変えるだけでは?
0659NAME IS NULL
垢版 |
2017/11/25(土) 19:47:20.46ID:???
>>658
違う。
というか、調べた限り、ATTACH自体が新しい機能らしくて、そこまで整備されてない。
どの名前でもopenしたものはmainになるし、メモリ上のはtempになる。
それにATTACHしたものは自由に名前を付けられる、というか、つけないとsyntax上アウト。
で、mainの別名をつけられれば助かるんだが、、、
なお、tableやcolumnは別名を付けられる。
0660NAME IS NULL
垢版 |
2017/11/25(土) 19:54:47.58ID:???
>>659
あ、そう言う意味でしたか。
開発元に聞くか自分でソースコードを見るしか無さそうですが、
StackOverflowで聞けば教えて貰えるかも?
困った時はStackOverflow英語版!
0661NAME IS NULL
垢版 |
2017/11/25(土) 20:03:08.43ID:???
>>660
まあググっても出てこないし、多分まだ機能自体がないと諦めてるんだわ。
ありがとう。
0662NAME IS NULL
垢版 |
2017/11/25(土) 20:10:41.94ID:???
>>661
dummy db作って実際に使うDBは全部ATTACHでと言うのは駄目なの?
遅くはなるだろうけど。
0663NAME IS NULL
垢版 |
2017/11/25(土) 20:34:48.34ID:???
>>662
いやこれはソースコード上の美学の問題だから、それを構造まで広げるのはマズい。
どうしてもというのなら関数にすればいいだけだし、その方がマシ。
どのみち最終的にはコメントアウトで捨てるコードだし、
特にいいやり方がなければコピペで放置だ。

ただしtempにいったん受けた方が速い可能性があり、結果的にそれをやるかも。
具体的に言うと、sqlite_masterのマージで
少ない方を多い方にINSERTするわけだが、(どうやらこの判定はしている)
今のところliveに150、archivedは1000-10000スレ程度で運用する予定なので、
最低150のINSERTが発生して、これが0.05sかかっている。(ように見える)
tempで空テーブルを用意してやればこれが不要になる。
落ちるスレに150レスなら転記でINSERT150回必要であり、単純には倍速になる可能性がある。
というわけだ。
0664NAME IS NULL
垢版 |
2017/11/25(土) 21:11:41.89ID:???
>>663
旦那、ソースコードの美学なんてもんに拘ってたら、日本の薄汚いIT業界で食っていけませんぜwww
0665NAME IS NULL
垢版 |
2017/11/27(月) 12:31:20.51ID:???
日本の薄汚いIT業界でSQLiteなんて使わんだろ。
だいたいは自分の自主開発用とか趣味用だろ。
SQLiteでクライアントに納品してる奴とか保守してる奴とかいるの?
いるなら俺も雇ってくれw
0666NAME IS NULL
垢版 |
2017/11/27(月) 12:38:03.57ID:dl62vFEl
自主開発てなんかイヤラシイな
0667NAME IS NULL
垢版 |
2017/11/27(月) 12:56:06.29ID:???
イヤラシイのは自家発電
0668NAME IS NULL
垢版 |
2017/11/27(月) 13:09:39.99ID:???
>>665
居るよ!
SQLServer Express、mdbの代わりに使える。
Andoroidアプリならデフォでしょうし。
0669NAME IS NULL
垢版 |
2017/11/27(月) 14:45:54.11ID:???
SQLiteの爆速さと手軽さは中毒になるからな
0670NAME IS NULL
垢版 |
2017/11/27(月) 21:00:36.34ID:nKW4iMOq
こおゆう大げさな事をゆう奴を信用してはならん
0671NAME IS NULL
垢版 |
2017/11/27(月) 22:08:08.61ID:???
シングルユーザーで使う分には便利だよな
トランザクションとか自分で実装したくないし、遥かに信頼できる
0672NAME IS NULL
垢版 |
2017/11/27(月) 22:10:53.86ID:???
>>669
速いかは微妙じゃないか?

俺は結局、PRAGMA SYNCHRONOUS = OFF; PRAGMA JOURNAL_MODE = MEMORY;
を常用する羽目になっているが、これってどうなのよ?と思うし。
ただし作者の「ジャーナルにはHDDの2回転が必要で、それくらいはかかる」
というのもまた正しいわけだが。
0674NAME IS NULL
垢版 |
2017/11/28(火) 01:19:55.49ID:???
いっぱいあるだろ。
何と言ってもPublicDomainってのが使いやすい。
使ってても言わなくていいし。
0675NAME IS NULL
垢版 |
2017/11/28(火) 19:58:13.47ID:???
ちょっと複雑なSQLを書けないところがNGかな。
副問い合わせとか。

それ以外はすんごくいい。
0676NAME IS NULL
垢版 |
2017/11/28(火) 21:11:17.44ID:???
服問い合わせ程度ならSQLite3でできるでしょ
0677NAME IS NULL
垢版 |
2017/11/28(火) 21:37:51.97ID:???
RIGHT OUTER JOIN、FULL OUTER JOIN が出来ないくらい?
0679675
垢版 |
2017/11/30(木) 05:52:18.47ID:???
>>676, 677
え?ほんと?
おぼろげな記憶だけど、

SELECT ...
FROM ...
WHERE xxx IN (SELECT...)

とかできなかったような・・・
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況