私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレ【この先一体】MySQL 総合 Part15【どうなるの】

みんなの評価 : ○
レスフィルター : (試験中)
MySQLのインデックスについて質問させてください。
例として「name」「type」という2つのカラムにインデックスを張る場合、
(name, type)
のように2つセットでインデックスを張る場合と、
(name)
(type)
と2つに分けてインデックスを張る場合と、パフォーマンスに差は出てくるのでしょうか。
ちなみに検索は、「name」のみ、または「name」「type」2つセット、の2通りで検索します。
もしパフォーマンスがかわらないのであれば、今後仕様が変わっても「type」のみでも検索ができるので、
後者を選択したほうがよいと思っています。
よろしくお願いします。
例として「name」「type」という2つのカラムにインデックスを張る場合、
(name, type)
のように2つセットでインデックスを張る場合と、
(name)
(type)
と2つに分けてインデックスを張る場合と、パフォーマンスに差は出てくるのでしょうか。
ちなみに検索は、「name」のみ、または「name」「type」2つセット、の2通りで検索します。
もしパフォーマンスがかわらないのであれば、今後仕様が変わっても「type」のみでも検索ができるので、
後者を選択したほうがよいと思っています。
よろしくお願いします。
>>95
はぁ?
データベースが論理的に一貫性保っていることと、データファイルが一貫性持っていることは別だろが。
そこになんらかの調停役をするものが必要だろ。
それについては、各DBによって仕様がまちまちだから、ZFS側だけで一貫性が保てるなんてことはあり得ない。
はぁ?
データベースが論理的に一貫性保っていることと、データファイルが一貫性持っていることは別だろが。
そこになんらかの調停役をするものが必要だろ。
それについては、各DBによって仕様がまちまちだから、ZFS側だけで一貫性が保てるなんてことはあり得ない。
マルチカラムインデックスだと、(a,b,c)にインデックス作ったら
bとcはインデックスにならないんだよね。
bとcはインデックスにならないんだよね。
>>101
それぞれのシーンで有効なインデックスは、
「name」のみ・・・(name)または(name, type)
「name」「type」2つセット・・・(name, type)
「type」のみ・・・(type)
全てに対応したいなら、
(name, type)と(type)の2つのインデックスを付与。
それぞれのシーンで有効なインデックスは、
「name」のみ・・・(name)または(name, type)
「name」「type」2つセット・・・(name, type)
「type」のみ・・・(type)
全てに対応したいなら、
(name, type)と(type)の2つのインデックスを付与。
>>106
最近はインデックスマージで、同時に複数のインデックスを使用可能。
最近はインデックスマージで、同時に複数のインデックスを使用可能。
>>111
おぉ、ありがとうございます。
じゃあ
「name」のみ・「type」のみ・「name」「type」2つセット
のスピードアップには
(type) (name) (name, type)
の3つインデックス用意するのがいいんですね。
名前にsageしてた Orz
おぉ、ありがとうございます。
じゃあ
「name」のみ・「type」のみ・「name」「type」2つセット
のスピードアップには
(type) (name) (name, type)
の3つインデックス用意するのがいいんですね。
名前にsageしてた Orz
質問させて下さい
sqlファイルをsshを使ってphpmyadminへインポートしたいのですが、
どのようにコマンドを書いてあげればいいでしょうか?
アドバイスをお願いします
sqlファイルをsshを使ってphpmyadminへインポートしたいのですが、
どのようにコマンドを書いてあげればいいでしょうか?
アドバイスをお願いします
Oracleと同じ仕組みはない
MyISAMなら1テーブル1ファイル
InnoDBなら全部まとめて1ファイルか、1テーブル1ファイル
主キーは1個しかないから主キーなんだぞ
これはOracleでも同じ
MyISAMなら1テーブル1ファイル
InnoDBなら全部まとめて1ファイルか、1テーブル1ファイル
主キーは1個しかないから主キーなんだぞ
これはOracleでも同じ
I/Oの最適化まで考えると、「全部まとめて1ファイル」「1テーブル1ファイル」のどっちも難しくなるな。
もっとも、ストレージまで含めると、表領域概念があっても複雑になるけど。
もっとも、ストレージまで含めると、表領域概念があっても複雑になるけど。
>>114
460 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2009/04/30(木) 00:27:39
mysql [ENT]
で、mysqlのコンソールが実行できることをまず確認
できないならmysqlが入ってない
できるのにそのエラーが出るなら、<以降のファイルの指定
460 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2009/04/30(木) 00:27:39
mysql [ENT]
で、mysqlのコンソールが実行できることをまず確認
できないならmysqlが入ってない
できるのにそのエラーが出るなら、<以降のファイルの指定
max_allowed_packetについて質問です。
今、ローカルの環境で、画像等のバイナリを格納するDBを組もうとしているのですが、
一定以上のサイズ(1MB以上)のデータをINSERTする時に、例によって
Got a packet bigger than 'max_allowed_packet' bytes
のエラーが出力されて、格納出来ません。
そこで、max_allowed_packetの値を大きくするのですが、ちょっとよく分からない現象に遭遇してます。
まず接続して、show variables like 'max_a%'で読むとデフォルトの1MB、
set (session) max_allowed_packet = 4194304 で4MBにセットして、show variables
でちゃんと4MBになっているのを確認し、バイナリのINSERTをかけても、
やはり’Got a packet・・’のエラーが出て、格納できず。(これは、php perlのスクリプト中からやってます。)
次に、接続中に set global max_allow・・・で同様に4MBにセット、show variables では1MBのまま(これは仕様どおり)、
一旦接続断してから再接続で、INSERTをかけるとINSERT成功。その後はGLOBAL設定が効いているので問題なく成功。
今、ローカルの環境で、画像等のバイナリを格納するDBを組もうとしているのですが、
一定以上のサイズ(1MB以上)のデータをINSERTする時に、例によって
Got a packet bigger than 'max_allowed_packet' bytes
のエラーが出力されて、格納出来ません。
そこで、max_allowed_packetの値を大きくするのですが、ちょっとよく分からない現象に遭遇してます。
まず接続して、show variables like 'max_a%'で読むとデフォルトの1MB、
set (session) max_allowed_packet = 4194304 で4MBにセットして、show variables
でちゃんと4MBになっているのを確認し、バイナリのINSERTをかけても、
やはり’Got a packet・・’のエラーが出て、格納できず。(これは、php perlのスクリプト中からやってます。)
次に、接続中に set global max_allow・・・で同様に4MBにセット、show variables では1MBのまま(これは仕様どおり)、
一旦接続断してから再接続で、INSERTをかけるとINSERT成功。その後はGLOBAL設定が効いているので問題なく成功。
その次は、GLOBALが4MBの状態時に、スクリプト中で set session max_allow・・・=1048576(1MB) にセット、
show variablesで1MBを確認後、1MB以上の画像をINSERT実行で、成功してしまいます。
公式のマニュアルには、'globalは次回接続以後、sessionはその時点から、同じ変数に別の値をセットするか接続断まで'
と書いてありますが、globalのほうはその通りなんですが、sessionでmax_allowed_packetを変更しても、
その時点で効いてないようです。
今はローカル環境で試していますので、my.cnf(my.ini)での設定や、rootでグローバル権限を持っているので
なんとかなるのですが、じつはこれを外部のレンサバで動かすことを考えているので、
my.cnfやグローバル権限がない状態で、この変更は不可能なのでしょうか?
ちなみに試した環境は、
WinXpsp3 + 5.0.78 5.0.79
Linux/CentOS + 5.0.79 5.0.80
ファイルサイズ約1.5MBの画像ファイルで、いずれも同様の結果となります。
show variablesで1MBを確認後、1MB以上の画像をINSERT実行で、成功してしまいます。
公式のマニュアルには、'globalは次回接続以後、sessionはその時点から、同じ変数に別の値をセットするか接続断まで'
と書いてありますが、globalのほうはその通りなんですが、sessionでmax_allowed_packetを変更しても、
その時点で効いてないようです。
今はローカル環境で試していますので、my.cnf(my.ini)での設定や、rootでグローバル権限を持っているので
なんとかなるのですが、じつはこれを外部のレンサバで動かすことを考えているので、
my.cnfやグローバル権限がない状態で、この変更は不可能なのでしょうか?
ちなみに試した環境は、
WinXpsp3 + 5.0.78 5.0.79
Linux/CentOS + 5.0.79 5.0.80
ファイルサイズ約1.5MBの画像ファイルで、いずれも同様の結果となります。
なんで企業はOracleを好むの?
高いのに。社長さんは自分でできないからサポートがあるOracleにしてるのかな?
ってゆうかそれバカじゃん。無知。IT無知。
データベースの操作くらい今時チンパンジーでもできるよね。
チンパンジー以下だね。間違いなく包茎。
Oracle利用者は包茎。
短小包茎。
そんなバカ共と、何でも自分で解決する努力家のMYSQLユーザーが同じに扱われたくないよ。
高いのに。社長さんは自分でできないからサポートがあるOracleにしてるのかな?
ってゆうかそれバカじゃん。無知。IT無知。
データベースの操作くらい今時チンパンジーでもできるよね。
チンパンジー以下だね。間違いなく包茎。
Oracle利用者は包茎。
短小包茎。
そんなバカ共と、何でも自分で解決する努力家のMYSQLユーザーが同じに扱われたくないよ。
いちど72CPU144コアのUNIXサーバでMySQL動かしてみたらいいよ
このへんでまともに動くのはOracleとDB2だけ
このへんでまともに動くのはOracleとDB2だけ
>そんなバカ共と、何でも自分で解決する努力家のMYSQLユーザーが同じに扱われたくないよ。
ぶっちゃけ、SybaseとかDB2とかHiRDBの方がMySQLより情報が少なくて
エンジニアがスゲー努力していると思うけど。
ぶっちゃけ、SybaseとかDB2とかHiRDBの方がMySQLより情報が少なくて
エンジニアがスゲー努力していると思うけど。
さらにその後色々調べて見ましたが、どうやらmax_allowed_packetを
sessionレベルで変更することは無理なようだと結論付けることにしました。
このあたりを参考にしました。
http://bugs.mysql.com/bug.php?id=22891
http://bugs.mysql.com/bug.php?id=14180
ちなみに、http://d.hatena.ne.jp/mir/20060201
ここによると、大きなサイズのクエリでも、max_allowed_packet以下のサイズに分割し、
何度も送信を繰り返すような実装があれば可能なようですが、
ここにある C/J や C APIを直接叩くような自前のコード以外には、
今のところphpのmysqli(拡張版のほう)関数以外には見つけられませんでした。
>>126での通り、その鯖ではmysqli関数が利用できませんし、
perl-DBIのほうにはそれらしいことが出来ない(?)ようなので、
現状、システムのmy.cnfの編集や、root等グローバル(スーパー)権限を持たない
ユーザーしか使えない環境では、サイズ制限を1MBまでにすることにします。
なにか他の方策や、「こうやれば出来る」みたいなことをご存知の方がおられましたら、
是非ともお教え頂きたいと思います。
sessionレベルで変更することは無理なようだと結論付けることにしました。
このあたりを参考にしました。
http://bugs.mysql.com/bug.php?id=22891
http://bugs.mysql.com/bug.php?id=14180
ちなみに、http://d.hatena.ne.jp/mir/20060201
ここによると、大きなサイズのクエリでも、max_allowed_packet以下のサイズに分割し、
何度も送信を繰り返すような実装があれば可能なようですが、
ここにある C/J や C APIを直接叩くような自前のコード以外には、
今のところphpのmysqli(拡張版のほう)関数以外には見つけられませんでした。
>>126での通り、その鯖ではmysqli関数が利用できませんし、
perl-DBIのほうにはそれらしいことが出来ない(?)ようなので、
現状、システムのmy.cnfの編集や、root等グローバル(スーパー)権限を持たない
ユーザーしか使えない環境では、サイズ制限を1MBまでにすることにします。
なにか他の方策や、「こうやれば出来る」みたいなことをご存知の方がおられましたら、
是非ともお教え頂きたいと思います。
DBの話じゃなくてシステムとして考えた場合、
画像データをDBにつっこむ意味ってあるの?
画像データはファイルのまま適当なディレクトリにつっこんで、
ファイル名と保管ディレクトリだけDBにINSERTしておくのが合理的な気がするが。
画像データをDBにつっこむ意味ってあるの?
画像データはファイルのまま適当なディレクトリにつっこんで、
ファイル名と保管ディレクトリだけDBにINSERTしておくのが合理的な気がするが。
ご意見ありがとうございます。
実は、あまり言いたくはなかったのですが、ある知人からの紹介で依頼を受けることになってしまって、
(正規のWeb作成業者等より)格安で請けることになったものでした。
私自身は、3,4年前からテキストベースの検索エンジン的なサイト等をいくつか運営しているのですが、
実はバイナリ(BLOB)型のデータを扱うのは今回が初めてでした。
その依頼者さんの希望として、
・アップローダ的な機能がほしい
・そのバイナリをDBに格納したい
・その閲覧やダウンの可否を制御したい
・Web領域にはバイナリを直接置きたくない
・依頼者さんが借りているレン鯖上で(しかもいくつかの複数の業者で同様に)動作するようにしたい
のような要望がありまして、とりあえずそのように作成しているところです。
特に閲覧制御については、会員登録やパスワードの設定等もDBの別カラムに格納し、
それをもって制御したいとのことです。あと領域に関しては、Web領域とDB領域が別になってるようなので、
Web領域を食わなくてもいいというような見地もあるようです。
私自身は、もし自前で運営するなら、>>134さんのおっしゃるようなシステム構成にすると思います。
前にそのようなことを提案したんですが、どうもDB内に格納することにこだわっているようです。
あと、恐らくはその依頼者さんが、管理の面で、連番になったidとファイル名などの照合などが面倒なのと、
削除する時(Web領域にはFTPで接続するようですが)間違って消したり、上書きされたりすることを
懸念されているのでは、と邪推しております。
>>133
!、確かにその手はありかもしれません。(視界が狭くなってました)
その依頼者さんが、どうしてももっと大きいサイズがほしいと希望するなら、
その方法でやってみます。どうもありがとうございます。
実は、あまり言いたくはなかったのですが、ある知人からの紹介で依頼を受けることになってしまって、
(正規のWeb作成業者等より)格安で請けることになったものでした。
私自身は、3,4年前からテキストベースの検索エンジン的なサイト等をいくつか運営しているのですが、
実はバイナリ(BLOB)型のデータを扱うのは今回が初めてでした。
その依頼者さんの希望として、
・アップローダ的な機能がほしい
・そのバイナリをDBに格納したい
・その閲覧やダウンの可否を制御したい
・Web領域にはバイナリを直接置きたくない
・依頼者さんが借りているレン鯖上で(しかもいくつかの複数の業者で同様に)動作するようにしたい
のような要望がありまして、とりあえずそのように作成しているところです。
特に閲覧制御については、会員登録やパスワードの設定等もDBの別カラムに格納し、
それをもって制御したいとのことです。あと領域に関しては、Web領域とDB領域が別になってるようなので、
Web領域を食わなくてもいいというような見地もあるようです。
私自身は、もし自前で運営するなら、>>134さんのおっしゃるようなシステム構成にすると思います。
前にそのようなことを提案したんですが、どうもDB内に格納することにこだわっているようです。
あと、恐らくはその依頼者さんが、管理の面で、連番になったidとファイル名などの照合などが面倒なのと、
削除する時(Web領域にはFTPで接続するようですが)間違って消したり、上書きされたりすることを
懸念されているのでは、と邪推しております。
>>133
!、確かにその手はありかもしれません。(視界が狭くなってました)
その依頼者さんが、どうしてももっと大きいサイズがほしいと希望するなら、
その方法でやってみます。どうもありがとうございます。
BLOB型をマジで使ったことないけど、たとえばセッションが10000個くらいあって
ダウンするファイルが10MBだった場合、100GBくらいメモリ消費するイメージがあるんだけど。
ダウンするファイルが10MBだった場合、100GBくらいメモリ消費するイメージがあるんだけど。
DBに画像つっこむのは絶対アホだと思うが、
無理にやるならmy.cnfの設定変えればいいんじゃね?
SETでちまちまやるより。
まさかmy.cnfも変更できないなんて話はないよな
無理にやるならmy.cnfの設定変えればいいんじゃね?
SETでちまちまやるより。
まさかmy.cnfも変更できないなんて話はないよな
>>129-131
凄く勉強になりました
凄く勉強になりました
何でデータベースは検索が速いのかが疑問なんですが
仕組みについてやさしく書かれているサイトは無いでしょうか?
仕組みについてやさしく書かれているサイトは無いでしょうか?
検索だけならMyISAMは早い。
GoogleがMyISAMの改造版を使ってるという記事を読んだことがあるな。
GoogleがMyISAMの改造版を使ってるという記事を読んだことがあるな。
ところでさMySQLはオプソなんだから、
クローンプロジェクトで管理していってもかまわんのじゃない?
それともフリーなだけでオープンじゃなかったわけ。
クローンプロジェクトで管理していってもかまわんのじゃない?
それともフリーなだけでオープンじゃなかったわけ。
forkはできるが、信頼できる組織か個人がやらないとダメだろう。
そこらの無名の人間がforkしても誰も使わないだろ。
MySQL創始者のmontyは会社はじめてるし、彼がやるならOKと思うが、innodbがOracleの物だからMyISAMしかダメなのはつらいかもな。もちろんforkしたらinnodbが使えないかどうかは知らんが
ユーザーからすればあまりに危険なんでforkしたやつではinnodb使う奴はそうそういないだろう。
Falconはどうもダメっぽい。っていうかinnodbのかわりになるほど完成度があがるとは思えん。
ま、なんだ
もともとinnodbがOracleに握られた段階でMySQLはキンタマつかまれてたわけで、その前のOracleによるMySQL買収交渉の時点でOracleの対MySQL戦略は決まってたはずだ。
つまりMySQLに先はない。forkに期待するのもいいが、別のDB使う検討をはじめるのが普通のエンジニアのリスク管理だと思うがな。
そこらの無名の人間がforkしても誰も使わないだろ。
MySQL創始者のmontyは会社はじめてるし、彼がやるならOKと思うが、innodbがOracleの物だからMyISAMしかダメなのはつらいかもな。もちろんforkしたらinnodbが使えないかどうかは知らんが
ユーザーからすればあまりに危険なんでforkしたやつではinnodb使う奴はそうそういないだろう。
Falconはどうもダメっぽい。っていうかinnodbのかわりになるほど完成度があがるとは思えん。
ま、なんだ
もともとinnodbがOracleに握られた段階でMySQLはキンタマつかまれてたわけで、その前のOracleによるMySQL買収交渉の時点でOracleの対MySQL戦略は決まってたはずだ。
つまりMySQLに先はない。forkに期待するのもいいが、別のDB使う検討をはじめるのが普通のエンジニアのリスク管理だと思うがな。
>>147
InnoDB も GPL だから、使いつづけることはできる。
InnoDB も GPL だから、使いつづけることはできる。
以前まで動いていた、MySQLが動かなくなってしまったのですが、どうにも
解決しないので、どうかお力を貸してください。
OS:CentOS5
MySQL5
MySQLを開始しようとするとエラーがでてしまいます。
エラー内容:
mysqld failed. The error was:MySQL データベースを初期化中:
Neither host '自宅サーバーのホスト名' nor 'localhost' could be looked up with
/usr/bin/resolveip
Please configure the 'hostname' command to return a correct hostname.
if you want to solve this at a later stage , restart this script with the --force option
[失敗]
どうか御教示ください。お願いします。
解決しないので、どうかお力を貸してください。
OS:CentOS5
MySQL5
MySQLを開始しようとするとエラーがでてしまいます。
エラー内容:
mysqld failed. The error was:MySQL データベースを初期化中:
Neither host '自宅サーバーのホスト名' nor 'localhost' could be looked up with
/usr/bin/resolveip
Please configure the 'hostname' command to return a correct hostname.
if you want to solve this at a later stage , restart this script with the --force option
[失敗]
どうか御教示ください。お願いします。



類似してるかもしれないスレッド
- 【MySQL】下らねぇ質問はID出して書き込みやがれ 2 (985) - [21%] - 2012/10/17 7:16
- 【】 MySQLを買収したSunを買収したOracleを 【】 (112) - [19%] - 2023/1/22 14:15
トップメニューへ / →のくす牧場書庫について