836 :
830 :2010/05/03(月) 01:12:11 ID:???
>>835 それですね!
バグが報告されているヴァージョンが5.1.43以前で
自分のヴァージョンが5.1.37ですから間違いなさそうです
症状もまったくもって同じです
最新ヴァージョンにはもうパッチが当ててあるようですね
治っているならいいです、次回、折を見て最新ヴァージョンに切り替えます
それにしても2007年9月に報告されたバグが
去年の暮れまで放置されてたなんて
MySQLの開発って意外と杜撰なんですね…
ありがとうございました!
普通そういう使い方しないからなw
ここまでバージョンあがってるのにいまだにこんなバグ出るほうがおかしくね? 開発管理は最初から今まで進歩しないてアマチュアレベルだとおもうけどな
不具合修正にも優先順位がある。 メリットが少ない変更は後回しなだけ。 といいつつ正直、将来は心配。
動かないならまだしも、クラッシュするってサービス止まっちゃうじゃないか。 最優先で修正されるべきなんじゃないの?
今回の問題は あろうことか、「開発者側の当事者」が 「いや、俺も5.0.52で試したけど再現性なかったよ」 って書いたもんで、約二年間も放置されていた、ってことでしょう 実際には、バグ報告者は5.1.20でバグを発見しているんで 5.0.52で再現性を試みる自体が開発者としておかしいんですが ALTER TABLE程度でいちいちフリーズされるのはどうかと思います (「さいさい変更を加えるのは最初の設計が悪い」とかは言いっこなしですよ) まぁ、優先順位が高かったからこそ、二度目のバグ報告で 一ヶ月も経たないうちに対策されたんだと思います とにかく、自分は今回の件でMySQLに対する信用は落ちました
MySQLを擁護するつもりはまったくないけど バグの10個や20個で騒いでたらシステム開発はできんよ MySQL 5.1でこれまでに修正されたバグは3,500個以上 Oracleだって9.2.0.1〜9.2.0.8で修正されたバグは6,000個以上 Windows2000には出荷当時63,000個のバグがあると言われていた ちょっとスパゲッティな気はするけどね>MySQL
>>842 >MySQL 5.1でこれまでに修正されたバグは3,500個以上
あらららら、MySQL 5.1ってもう十分に枯れたシステムだと思ってたんですけど違ったんですね…
こうなるとPostgreSQLの修正されたバグの数が知りたくなりますね…
でも、今回の件は許せない
トヨタのリコール隠しくらい許せない
MySQLとポスグレはリリースタイミングが違うから期間ごとのバグ数比較してもしかたがないような気もする。 ポスグレは毎年新バージョンリリースしてるんで比較するなら8.4.1、8.4.2、8.4.3、8.4.4のバグ数と5.1.27以降のバグ数じゃね? ちなみにポスグレの8.4.0はリリースバージョンだから基本バグなしってスタンス。 今ざっくり数えてみたらポスグレの8.4は841から844で修正170くらいだな。
>>844 そんな殺生な…
と思ったら
>>845 誠に乙です
このスレでこう呟くのもアレですが
やっぱりPostgreSQL、いいなぁ…
>>846 だったらPostgreにすりゃあいいでしょーが w
客先とかの都合で変えられないんだったら諦めなしゃーないし w
>>847 元々最初に触ったデータベースはPostgreSQLでしたし、そのうち移ります…
世間様はまだMySQLを崇拝していらっしゃるんで、MySQLは完全に捨て切れないですが…
>>848 > 世間様はまだMySQLを
日本はPostgreが先行だったと思ったが。
>>850 なので、日本は例外的にPostgreSQLが大きなシェアを持っている。
けど、やっぱりLAMPってことでMySQLがかな〜りもてはやされたからねい。
日経うんちゃら読んでわかったつもりになった担当者がMySQLを強制
というのは普通にあった。
L inux A pache M isa P ostgre これで行くんだ。
PostgreSQLは品質が良いからバグが少ないのか ユーザが少ないからバグが抽出しきれていないのかが ちょっと分からない
ソース読み比べてみPostgresとMySQL なんでMySQLが低品質か分かるよ
正規化するための主キーの設定と検索速度?、今後のメンテナンス?で 悩んでいるため質問させて下さい。 重複しないカラムとして「ショップ名」があります。 (東京店、大阪店、....) ショップ名を中心に各店舗の人数とか売上とか細かい詳細があるため 複数のテーブルに分けて正規化します。 自分ではショップ名が重複しないから主キーにすれば良いかと考えますが こういう場合でもあえてIDみたいな数値型(INT型?)のカラムを作って それを主キーにした方が良いのでしょうか? (auto_incrementにすればさらに楽だから?)
857 :
855 :2010/05/05(水) 23:55:32 ID:???
追記 MySQLで各テーブルを見る時に ショップ名が入っていた方が分かり易いというのもあります。 ただ将来絶対にショップ名が変わらないという保証はないので そういう意味でメンテナンス的に?数値にした方がいい??
どれもやめたほうがいいと思うけどな。
主キー列を更新するっていうのが筋悪なので 名前が変わることのある店名のようなものは主キーにしないのが定石。 名前を主キーにすると外部キーをつけたときにメンテナンスしづらくなるし、 RDBMSによってはそもそも主キー列が更新できないものもある(TimesTenとか) なので店舗IDを主キーにするのがふつうで、これをauto_incrementにするかどうか。 auto_increment列は売り上げとか日々データが増えるテーブルに対して つけるものだと考えているので、私なら店舗IDはauto_incrementにしない。
>>856 ソース読むんだよ、坊や。
バイナリ拾って「あぁグチャグチャやんw」って言っちゃダメだよ、坊や。
862 :
855 :2010/05/06(木) 15:46:25 ID:???
>859 わかりやすい解説ありがとうございました。 >なので店舗IDを主キーにするのがふつうで、これをauto_incrementにするかどうか。 >auto_increment列は売り上げとか日々データが増えるテーブルに対して >つけるものだと考えているので、私なら店舗IDはauto_incrementにしない。 入門書や初心者向けのサイトだと idを主キーにしてauto_incrementにしているため そういうものかと思っておりましたが 日々増えるデータに対して割り当てるですね。 たしかに店舗IDだとそうそう増えるものではないため 自分がわかりやすい数値にすればいいわけか。 ありがとうございました。
mysqlについて質問です よろしくお願いします table_a |orders_id|orders_date| | 1 |20100101 | | 2 |20100101 | | 3 |20100101 | table_b |orders_id|shop_kind| | 1 | 0 | | 3 | 1 | table_bのshop_kindが1以外のものと、table_bにorders_idは無いがtable_aにorders_idが存在するレコードを抽出したいのですが、クエリをどう記述すればいいかわかりません 以下のSQLのXXXXXXXに何か入れればできそうなのですが、どうすればいいですか? select ta.orders_id from table_a ta left join table_b tb on (ta.orders_id = tb.orders_id) where (tb.shop_kind !='1' or XXXXXXX); 結果はorders_idが1と3のものが取れればいいです
864 :
863 :2010/05/06(木) 16:37:58 ID:???
すいません訂正です >結果はorders_idが1と3のものが取れればいいです 結果はorders_idが1と2のものが取れればいいです
MySQLで、INSERTしようとすると 「the table 'table_name' is full ERROR 1114」 と出て登録できなくなりました。 MySQLのバージョンが5.1で、ENGINEは、NDBCLUSTERです。 tmp_table_sizeとmax_heap_table_sizeをデフォルトの16Mから 200Mへ変更してみても同じエラーになります。 パッと見よく分からない質問かもしれませんが、 こんなことが原因の可能性があると思う方がいましたら 教えてください。お願いします。
MySQL_Cluster や NDBCLUSTER をわからずに言うけど 保存用ディレクトリのあるパーティションが いっぱいとかじゃないの? メモリテーブルならどこのサイズなんだろうかな...
tmp_table_sizeとmax_heap_table_sizeはMEMORYストレージエンジンの設定だから NDBとは関係ないパラメータ、のはず Sun Micro.のときはよく宣伝してたけど 正直MySQL Cluster使ってる人は超少ないと思う
>>865 あー、うちでもそれ、tmpテーブル作れない、ってのがあったなぁ。
そんときはええと・・・・・、うーんと、たしかインデックスのサイズも含めたのがtmp_table_sizeだか
heap_sizeだかになって、その見積もりが甘かったのが原因、だったきがします。
username、pointというカラムがあるテーブルがあるとして、 ランキングの順位をつけて出力するSQLはどのようにかいたら うまくいくでしょうか。 3位が4名いても次は4位となるランキングとなってます。 現在のところは select username,point from table order by point asc; でプログラム側で処理しておりますが、全てSQL側で処理ができれば 便利だと思い、質問させていただきました。 よろしくお願いいたします。
871 :
NAME IS NULL :2010/05/12(水) 06:54:41 ID:BasMxRqb
phpMyAdminの情報から MySQL * サーバ: localhost via TCP/IP * サーバのバージョン: 5.1.37 * プロトコルバージョン: 10 * ユーザ: root@localhost * MySQL の文字セット: UTF-8 Unicode (utf8) Web サーバ * Apache/2.2.12 (Win32) DAV/2 mod_ssl/2.2.12 OpenSSL/0.9.8k mod_autoindex_color PHP/5.3.0 * MySQL クライアントのバージョン: 5.1.37 * PHP 拡張: mysqli phpMyAdmin自体はUTF-8になっています。 この状態でphpMyAdminからテーブル作成したところchar型やvarchar型の照合順序がlatin1_swedish_ciになります。 show create tableで見ると、テーブル自体のDEFAULT CHARSETはlatin1となっています。 このままinsert文を実行してchar型に日本語を挿入して、phpMyAdminからselectすると????といった感じに文字化けします。 自前で作ったPHPスクリプト(UTF-8で保存)からアクセスしてphpMyAdminでinsertしたものを取得すると同様に????となります。 次は自前で作ったPHPスクリプト(UTF-8で保存)からテーブルを作成して同様にinsert文で日本語を挿入した場合、 照合順序やテーブルのDEFAULT CHARASETは同様ですが、文字化けせず取得することができました。 phpMyAdminから挿入した項目を見てみると、????にはなってないものの文字化けした字になっています。 さらにPHPスクリプトをShift_JISに保存しなおして同じテーブルに対しinsert文でさらに追加したところ、 追加した部分は正常に見れるものの、UTF-8で保存したときの日本語は文字化けしています。 日本語を挿入する場合、自前のスクリプトから最初に挿入したときの文字コードで挿入し続ければ問題ないことが分かったのですが、 こういうものなのでしょうか? 文字コード関連は複雑で関連ドキュメントを見てもいまいちよく分かりません・・・
872 :
NAME IS NULL :2010/05/12(水) 11:23:43 ID:e1mmKCKP
初歩的とは思いますが、質問です。 作成したビューってのは、元のテーブルが更新されたら、そのタイミングでビューも更新されるって思ってていいのでしょうか? また、year(sysdate())みたいなのを条件に含めてた場合も、日付が変わったタイミングでビューのデータも更新されるって認識で良いのでしょうか?
ビューは普通にSELECT文を発行した結果返ってくる結果を 1つのテーブルに見せかけるだけのもの 当然、データは最新のものになるよ
>>873 ありがとうございます。
SELECTのエイリアスみたいなものですか。
875 :
NAME IS NULL :2010/05/14(金) 15:58:04 ID:UNEfj5/X
質問です。 バージョンは5.1.41です。 ユーザ情報のみのエクスポートをする方法ってありますか? 出来れば「GRANT」の形で出てくると嬉しいんですけど。
876 :
865 :2010/05/14(金) 16:46:55 ID:???
>>866-868 回答ありがとう御座いました。
ちょっと原因の特定ができず、
前任者の作ったシステムで本番環境だったため、
4日ほどかけて全部SQL-serverに移行しました。
質問させてください。 table_main +---------+-----------+ | main_id | main_name | +---------+-----------+ | 1 | NAME1 | | 2 | NAME2 | | 3 | NAME3 | +---------+-----------+ table_sub +---------+----------+ | main_id | have_num | +---------+----------+ | 1 | 10 | | 2 | 10 | | 2 | 20 | | 3 | 10 | | 4 | 20 | +---------+----------+ このようなテーブルがあったとします。 この中から、たとえば「have_numを 10 と 20 両方もつ main_id の main_nameを取得する」 という SQL 文はどのように書けばよいのでしょうか。 サブクエリなど勉強中でいまいち方法が思いつきません。 お詳しいかた教えていただけましたら幸いです。 バージョンは5です。
試してはいない。 SELECT tm.main_name FROM table_main tm, table_sub tsa, table_sub tsb WHERE tsa.have_num = 10 AND tsb.have_num = 20 AND tsa.main_id = tsb.main_id AND tsa.main_id = tm.main_id
>>878 ありがとうございます!
have_numをもつ条件をさらに増やすとなると、
同様に SELECT する同一テーブルがどんどん増えてしまうのですが、
効率をよくするよい方法はありませんよね…?
もしかしたら、この辺でどうだろ?
SQL質疑応答スレ 9問目
http://pc11.2ch.net/test/read.cgi/db/1252492296/6 6 :NAME IS NULL :2009/09/09(水) 19:37:35 ID:???
よくある質問3
(問)
ID HOGE
01 A
01 B
01 C
02 A
03 B
HOGEをAもBもCも持っている、ID:01だけ取り出すにはどうすればよかですか
(答1)
SELECT id
FROM TableName
WHERE hoge in ('A','B','C')
GROUP BY id
HAVING count(DISTINCT hoge) = 3
;
(答2)
select *
from TableName T1
where not exists (select *
from (values 'A', 'B', 'C') T2 (HOGE)
where not exists (select *
from TableName T3
where T1.ID = T3.ID
and T2.HOGE = T3.HOGE
)
)
;
※valuesの部分(Table Value Constructor)はDBMSによって文法がかなり違うので注意
created_tmp_disk_tables が発生したクエリを特定することはできますか?
>>880 ありがとうございます!
このような方法があるのですね。
大変勉強になりました。
さらに、これを発展させて、
table_main
+---------+-----------+
| main_id | main_name |
+---------+-----------+
| 1 | NAME1 |
| 2 | NAME2 |
| 3 | NAME3 |
+---------+-----------+
table_sub
+---------+---------+
| main_id | item_id |
+---------+---------+
| 1 | 1 |
| 2 | 1 |
| 2 | 2 |
| 3 | 1 |
| 4 | 2 |
+---------+---------+
table_item
+---------+-----------+
| item_id | item_name |
+---------+ ----------+
| 1 | アイテム1 |
| 2 | アイテム2 |
+---------+-----------+
「アイテム1 と アイテム2 の両方もつ main_id の main_nameを取得する」
という風に複雑になると、どのようにやればいいのでしょうか。
まず item_name に対応した item_id を取得し、
それを両方もつものを
>>880 の方法で調べる……
という風な方法は思いつきましたが、
1つの SQL 文で記述する方法がわかりませんでした。
お詳しい方教えていただけましたら助かります。
インポートについての質問です。 最新MySql Windows番にて、csvをインポートしようとすると ERROR 1292 (22007): Incorrect datetime value: '2010/05/20 00:00:00 2' for column 'Date' at row 1 と出るのですが、日付データの最後についてる 2 の意味が分かりません。 使用したSQL文は以下のとおりです。 LOAD DATA INFILE "FileName.csv" INTO TABLE TableName FIELDS TERMINATED BY "," ENCLOSED BY '"' LINES TERMINATED BY "/r/n"; Dateはテーブルの最後のフィールドで、他のフィールドのエラーは解決しましたが このエラーだけ解決できません。エディタでcsvを開いたら"でくくられてないのに 取り込んでみたら"でくくられていたりと、いろいろと躓きまくっています・・・ どうか助言をお願い致します。
884 :
883 :2010/05/22(土) 02:14:29 ID:???
自己レスです解決しました。 LINES TERMINATED BY "/r/n"; を LINES TERMINATED BY "\r\n"; に書き換えたところうまくゆきました。 スレ汚し失礼しました。
Mac(10.6)にphpMyAdminを入れたのですが、パスワードがわからず ブラウザからログインができません。どのように設定すれば良いのでしょうか?
パスワードを知ればよろし。 どうしても分からないなら、mysql.userテーブルの該当の ユーザ@マシンのパスワードを消してしまう。 (これはrootとかのパスワードが分からないと出来ないだろうけど)
3306を使ったDB接続ってNAT越えられますか?
もちろん
3306だけ通せばいいのでわりと楽なほう
なるほど ありがとうございます たしかにOracleだと他のポートも必要でしたよね
>891 まぁ確かにセキュリティの問題はありますね お客がやりたい 責任は取るって言われるとやるしかないんです F/Wで元IPを固定したらまぁ簡単に問題は起こらないと思いますが・・・
待ち受けポート番号変えておけばちょっとは安全かもよ
コマンドプロンプトでSelect文を実行すると 件数が多くなると全体を見れ無くなるんですが txtファイルに出力するしかないですか?
コマンドプロンプトの行数を増やす
Pager使う
とりあえず、コマンドプロンプトのプロパティを開いて、レイアウトタブを選択して、 その中の画面バッファのサイズの高さを増やしてみよう。
898 :
NAME IS NULL :2010/05/27(木) 23:23:22 ID:tW/OnXJS
Navicatとかを使ったら?
LIMIT入力すれば?
MYSQLがインストールできましぇん OS:WINDOWS XP MYSQL VER:5.1.45 executeクリックした後に最後のチェックで1045エラーでrootのパス設定出来ないんですけど どうしたらいいでしょうか。 本当すいません。教えて下さい。
executeとrootは小文字だろ
PHP+MySQLで開発しています。 MySQLへのアクセス方法は、PHPからPHPのmysql関数、あるいはPHPのPDOクラスを用いて行う予定です。 できたものは公開したいと思っているのですが、ライセンスをどうすればいいのかよくわかりません。 作るアプリケーションは商用にも使えるアプリケーションになります。 これで開発したアプリケーションのライセンスはGPLになるのでしょうか? できれば制限が緩いBSDやMITあたりにしたいのですが、MySQLを使ってる時点でGPLになってしまいそうで困っています。 MySQL以外にもPostgreSQLとSQLiteにも対応する予定です。 BSDやMITにしたい場合、MySQLの対応ははずすしかないのでしょうか? どのみちソースコードを公開するからGPLでいいじゃんというツッコミはなしでお願いします。
関係ないです
907 :
NAME IS NULL :2010/06/03(木) 18:17:38 ID:zEZNACiR
PHPとMySQLでレンタルバナーみたいなのを作成しています。 会員は2000人ほどですが、1日10万前後のINSERTがあります。 1つのテーブルでアクセスを追加していく形なのですが、 INDEXさえ指定していれば、今後もこのままで大丈夫でしょうか? それとも会員毎にDBを分けた方が良いのでしょうか? 将来を見据えて負荷がかからないような構造をしたいと思っていますので 構造についてアドバイスお願いします。
tableA id | name -------- 1 | aaa 2 | bbb tableB id | tableAid | point ----------------- 1 | 1 | 5 2 | 1 | 8 3 | 2 | 10 3 | 2 | 9 というテーブルで、 tableB.point が9以下の tableA.name を取得したいのですが select tableA.name from tableB inner join tableA on tableB.tableAid = tableA.id where tableB.point < 10 とすると、当然ですが tableA.name が重複してしまいます。 プログラム側で取り除けばいいのですが、なるべくSQLのみで解決したいです。 可能でしょうか?
SELECT DISTINCT 〜
>>907 一日に10万レコードも増加するんだったら、1テーブルでは無理がある
会員毎にテーブルを分けるなりした方がいいだろう
それに加えて、古いレコードを削除するロジックも必須と思うが
というかアクセスログみたいに追加しかしない、複雑な検索を しないものならDB以外の保管手段を考えたほうがいいのでは
DB以外の手法を取るとして、例えばファイルにしちゃうと、 件数が多すぎるから、ファイルオープン後の処理でスクリプトのメモリオーバーでコケる可能性が高いよ
それ以前に設計の見直しが出来ないか? 詳しい仕様を知らんが、 件数をカウントするだけなら件数を保持しておくフィールドをインクリメントしてUPDATEすりゃあいい なんでもかんでもINSERTしてるから肥大化するんでねえの?
>>912 追記の書き込みオンリーで開いてもそうなる?
915 :
907 :2010/06/04(金) 13:45:41 ID:68Ryowuk
>>910-914 みなさんありがとうございます。
テーブルの構成は単純に
id|user_id|banner_id|date
で、「どの会員のバナーがどの日時にアクセスされたか?」を記憶します。
管理画面で範囲検索がしたいので、UPDATEではなくINSERTが必要です。
最低2年以上は保管したいと思っているのですが、
テーブルを分けた方が良いんですかね・・。
JOINして会員データと繋げて管理画面で表示させたいので、
DBを使う方が良いんです。
検索はあんた1人がチマチマやるんだったらどうでもいいんじゃないかな。 動作が遅いとどっかから苦情がくるなら別だけど、これ以上正規化もないだろうからね。 それ以外は単純にINSERTしかしなくて、今問題がないなら余り考えないでもいいようにも思うけど。 INSERTにかかる時間は誰も感じないで済んでるんだろし、一時的にでも今更止められないでしょ。 あとはOLDテーブルみたいなのに心太する仕組みだけ組んどけばいいんじゃないの。
>>914 なる可能性が高い
オープンしたファイルの中身を変数に落としていく際にね
時間は割り切って捨てたら? 俺だったらこうする user_id|banner_id|day | count プライマリーキー:user_id、banner_id、day ようするにday(Y-m-d)毎にcountしちゃえば〜って事 10万件/日の2年分のデータを突っ込んだら、 ユーザー毎にテーブルを分けようとも、JOINで固まる それに、915のテーブルだと、ある会員のアクセス数の取得 SELECT count(*) FROM TBL WHERE user_id= ? AND date < ? AND date <= ? も動かなくなるぞ
MySQL Proxy の話ってここでいいんでしょうか? ぐぐってもあまり情報がでまわっていないもので・・・
>>919 古いデータを定期的にそうやって集計してから切り捨てる、ということならアリだが、
最初からそういうテーブルしか持たないんだったらめんどくさいうえにかえって
遅くなるばかりでメリットがない。
遅くなることはない、10万件を2000件に圧縮できる SELECTもチョイだ 毎日10万件溜まってくテーブルにJOINだとかcount(*)するほうがおかしい
923 :
NAME IS NULL :2010/06/04(金) 22:30:51 ID:ip+eErJw
mysqlを使ったプログラミングをするには、cのapiとjavaのどっちがおすすめ?
924 :
NAME IS NULL :2010/06/05(土) 00:13:35 ID:cbT55XsI
MyISAMについて質問です。 トランザクション機能が使えないMyISAMを採用する場合、 トランザクションを使わないことによる問題点というものに対して、 特別な対策(テーブルを正規化しないとか)をするものなのでしょうか? もしくは、トランザクションを使わないことによって発生する問題点を許容した形でシステム開発をするものなのでしょうか? トランザクションを使わないでシステムを開発することに対してのイメージがわかないので、 MyISAMを使ってどのようにテーブル設計、というか注意事項というかが必要なのか、 そこらへんをご教示いただければと思います。
925 :
NAME IS NULL :2010/06/05(土) 02:43:11 ID:nyGql8Ff
「MM00」みたいな英数字を表示させるにはどういった型で設定すればいいですか? ちなみにVARCHAR(10)でやっても出来ません>< エラー名は ERROR 1054 (42S22): Unknown column 'MM00' in 'field list' です
>>922 insertで済んでいたものがselect→insert/updateになるだろ。
同じ会員のバナーが同時にアクセスされることもあるだろうからロック待ちも
発生するし、厳密にはserializableじゃなきゃならんから、そうしたら毎回
テーブルロックだ。
1時間に平均4000件、1分で70件か。 実際はGTに集中するだろうから10倍見積もるとして・・。 テーブルロック仕様を考えたやつはこの業界で生きていけないぞw
>>925 単にselectするカラム名を間違っているだけなんじゃないの?
>>924 MyISAMの問題はトランザクションがないことよりもクラッシュセーフでないこと。
電源ぶちって切っただけでDBが壊れる。
それでもよいときだけ使う
930 :
NAME IS NULL :2010/06/05(土) 18:04:19 ID:8RarHjRw
なんで、設定フィルの拡張子がmy.cnfとmy.confの2種類あるの?
931 :
NAME IS NULL :2010/06/05(土) 22:36:23 ID:qBJImX+X
SELECT test_tb.id,(test_tb.number+test_tb2.number)AS total FROM test_tb LEFT JOIN test_tb2 USING(id) GROUP BY test_tb.id というSQLがあって、結果が id|total 1 |10 2|NULL となります。id2はtest_tb2.numberが存在しないのでNULLになりますが、 存在しない場合は「0」にするにはどう書けば良いのでしょうか?
932 :
NAME IS NULL :2010/06/05(土) 23:06:32 ID:6EEUsDw0
>>931 mysql固有関数を使うなら
IFNULL((test_tb.number+test_tb2.number),0) AS total
いや、test_tb.numberには値があるかもしれないんだからこうだろ IFNULL(test_tb.number,0) + IFNULL(test_tb2.number,0) AS total
934 :
NAME IS NULL :2010/06/05(土) 23:18:40 ID:qBJImX+X
>>933 質問なんですけど null値が含まれた計算結果はnullになるのでは?
936 :
>>924 :2010/06/06(日) 02:49:52 ID:???
>>929 ありがとうございます。
my.cnfはあまり設定項目が多い印象を受けなかったのですが、 セキュリティに関してはmy.cnfで設定しないのですか?
938 :
NAME IS NULL :2010/06/06(日) 19:34:34 ID:eYBmtmqg
InnoDBで1テーブル/ファイルにしている場合、 既存テーブルにautoextendつけたり、MAX_SIZEつけたりできますか? 有識者の方、よろしくお願いします。
>>938 1) innodb_file_per_tableのときは各テーブル自動でautoextendする
2) InnoDBはそもそもMAX_ROWS効かない
940 :
NAME IS NULL :2010/06/07(月) 11:44:41 ID:7daPAieJ
すみません、質問させてください
WindowsからLinuxに移行しましてMySQLをインストールシヨウと思っているのですが、HP(
http://dev.mysql.com/downloads/mysql/#downloads )のどれをインストールすればいいのか分かりません
自分の持っている本にはmysql?.tar.gzをダウンロードとありますが、rpmしか見当たりません
で、こういうサイト(
http://www.unix-vm.com/centos_4_1.html )を参考にしたのですが、4つもパッケージをダウンロードしています
これはやはり全部ダウンロードしなければいけないのでしょうか?
Windowsだとインストーラ一つだけだったのでどうなのかなぁ、と思いまして
OSはcentOSを使っております
以前yumでMySQLをインストールしたことはあったのですが、バージョンが古かったものでクリーンインストール時に「この際最新版をインストールしよう」と思い立ったのですが分からなくなりまして
宜しくお願いいたします
941 :
NAME IS NULL :2010/06/07(月) 11:48:29 ID:7daPAieJ
ごめんなさい、もう一つ質問がありました centOS5.4を使っている自分の場合、Select PlatformはRed Hat Enterprise Linux 5を選択するのでしょうか? それともLinux - Genericを選択すればいいのでしょうか?
本がどれだかわからんけど、持ってる本の通りにやりたいなら Source Code 選んでGeneric Linuxのとこに*.tar.gzあるよ
"Source Code"すら探せないんだからWindowsに戻るが正解
100万レコードを全文検索する事って出来ますか?
可能
条件がそれだけならまぁ可能だわなぁ
じゃ、1レコード10KB程度の文章があったら?
>>939 ありがとうございます。
file_per_tableだとデフォルトでautoextendつくんですね。
2)についてですが、
質問の仕方がかなり悪くて申し訳なかったです。
MAX_ROWSではなくてautoextendのMAX指定のことをお聞きしたいのです。
既存ファイルのautoextendのMAXサイズを変更できるのでしょうか。
教えていただければ幸いです。
よろしくお願いします。
>>947 可能
ただし1回の検索に20分ぐらいかかるかも
>>941 どちらでもよい
rpmの場合はclient、server、shared、develの4つを入れるのが基本
>>937 my.cnfって最大200項目ぐらいあるけどそれでも少ない?
セキュリティは主にSQLでmysqlデータベースに対して設定する
>>950 また条件後付けで「私のメモリは16GBです」「私のストレージはSSDです」とか言われるぞ。
>>953 その条件だからって、20分が2秒にはならないだろ?
いいえ、死ぬ必要はNight思うわ
夜に死ねと
・後出して条件出して答えてもらう ・単にMySQLの可能性が知りたいだけ どっちだろ?素人だったらそもそも 100万件のデータなんて扱わないはずだから、後者かな。
959 :
NAME IS NULL :2010/06/08(火) 14:18:15 ID:6789QTvE
話はそれるけどいまMysqlの日本語全文検索って senna 以外はどんなのがあるの?
5.1のエクステンションを見たことある 実績とかは知らない
JOIN使うとすんごく遅くなるんですけど仕様ですか? データは1テーブル数10万件 3、4テーブルJOINしてます。
さあ、ジョイナス!!
テーブル構造もSQL文もインデックスも情報なしに、なぁ。
ありがちなのは、N自乗。
でも実際、インデックスを理解しないで使っている人周りに結構居ない?
なんだか分からないが付けると速くなる魔法の機能でしょ、理解してるよ
>>967 はネタだろうが、
実際に使わないインデックスが20くらい付いたテーブルは見たことがある
とりあえず、JOINのキーになっているフィールドはインデックスにしてる
where句ある?
join されるテーブルで where 句使うなら、 複合インデックスで where 句のカラム, 結合カラム とインデックスを張らないとダメだよ。 joinする場合はどっち道 フルJOIN 避けるために件数減らしてからJOINだから、 結合カラムに単体でインデックスを張るのは意味がないと思う。
>>971 結合カラム自体を where で絞り込む場合は?
でもまあ実際コード引継ぎとかすると、 インデックスとクエリ直すだけで速度が100倍とかなるから、 おかげで神みたいな扱いをされて楽。
とあるカラムのインデックス
976 :
NAME IS NULL :2010/06/09(水) 22:13:06 ID:7pAbJT2V
auto_incrementを既存のテーブルに追加したいのですが、 どのようにsqlを書けばいいのかわかりません どなたか、教えてください
ALTER TABLE ADDなのかCHENGEなのか知らんが。
インナーのネイティブアルターか
キュキュキュッ
981 :
NAME IS NULL :2010/06/10(木) 09:07:48 ID:9/rnYsAK
質問させてください。 記号などをInsertするとIncorrect string valueでエラーになる のですがどうしたらいいでしょうか? A,B,Cと複数のDBがあり、Aでしか起きない現象になってます。
記号などって…w 例えばどの文字なのか、いくつか挙げるってのを何故しないの? DB/テーブルの文字コード設定を調べておくってことを 「質問させてください」の前にやってないの? そういやMySQLのバージョンすら分からんな。
983 :
NAME IS NULL :2010/06/10(木) 14:45:20 ID:3agFnNQw
みなさん、どこまで正規化します? 正規化してテーブル分けすぎて後から結合する時に困ります・・。 かといって1つのテーブルで管理すると、レコードが多くなりすぎるし。
正規化って何なのかよくワカンナイ 同じデータが重複しないようにしたりするだけ、1つのテーブルで管理とか逆にどうやってるのか分からない 正規化もワカンナイ
986 :
NAME IS NULL :2010/06/10(木) 16:23:57 ID:3agFnNQw
>>985 例えばECサイト用のDBを構築してレポート表示したい時、
注文レポート、売上げレポート、アクセスレポート
と、3つの用途に関するレポートをテーブル分けしているとします。
これを表示する時、商品IDで結合するわけですが、
物凄くSQL文が長くなり、パフォーマンスに影響が出ないか懸念しています。
テストで、10レコード程度入れて試している分には速いのですが・・。
>>986 ハードウェアのスペック挙げれば解決できるからいいんじゃないの。
俺の場合、データを重複させないようにした方が、二時利用に役立つから極力してるよ。
988 :
NAME IS NULL :2010/06/10(木) 16:31:35 ID:3agFnNQw
>>987 そうですね。SQL文が長くなる=プログラム側の問題は考えないようにします。
>>988 SQL文が長くなってしまってメンテが大変になる場合は、
ある程度区切って結合させてデータを取得し、プログラム側で結合させる事もある。
ま、いろいろ方法はあるよね。
>>987 ハードに逃げるのは馬鹿のやること。
厳しい事を言うが設計がおかしいと考えるべき。
3テーブルを結合したくらいで"ものすごく"SQLが長くなるってのがイメージ付かないんだけど? それにSQLの長さ自体はパフォーマンスには関係ない。 商品IDは主キーなりインデックス張ってあるなりしてるだろうけど、インデックスを使っている限りはDBというものは極めて高速に動く。 データ数が1テーブル10万〜100万オーダー超になるとどうしても遅くなるので、 そういった場合は最後の手段としてハードウェアのスペックを上げる。 3テーブルJOINを使うとメンテ出来ないって?さっさと別業種に転職しろw
メンテ出来ないって誰が書いてるの?
「長い」という基準の違いでしょう
>物凄くSQL文が長くなり、パフォーマンスに影響が出ないか懸念しています。 奇妙な考えだなぁ。
10KB程度のSQLはよくあること
どうせDBの実行所要時間なんて殆どがディスクアクセスでしょ。 いくら長いSQL文たって、そのパースにかかる時間の割合なんぞたかが知れてるんじゃないの。
いろいろとパスワードを設置できるみたいですが、 mysqlにログインする時のパスワードと、databaseにログインする時のパスワードは別なんですか?
パスワードはユーザに設定してるもんだよ。 だから、DBにそのユーザが含まれていたら同じ。
毎日毎日、10万件ものデータいつどうやって作ってるのか、そっちのほうが気になるよ。
普通にサイト運営してたらログとして溜まるだろうが
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。