元スレMySQL 総合 Part24
mysql覧 / PC版 /みんなの評価 :
851 = :
念じる
852 = :
そういう変換をするストアドファンクションを定義するなどしてそれでORDER BYかけることはできる。
ただし MySQL は関数ベースのインデックスが張れないから、パフォーマンスは期待できないが、
SQL 処理中の ORDER BY する時点でソート件数が少ないのであれば影響は少ないだろう。
もう一つの代替案は、そのように変換済みの実カラムを追加してそっちで ORDER BY する手もある。
こっちはその分の容量を食う代わりにインデックスは効く。
853 = :
列がcolAとして
select colA,cast(substring(colA,4) as unsigned)
from tbl
order by cast(substring(colA,4) as unsigned) ;
これでは駄目?
駄目なんだったら
文字列の部分と数値の部分を分け、数値の部分についてLPADで0埋めしてまた連結するとか
そこまでしないといけないもん?
856 = :
祈りなさい
858 = :
複合インデックス張るのはあくまで手段であって目的ではないはずだ。
クエリの高速化が目的だろうとは思うけど、本当に他に手はないのか?
何を根拠に複合インデックスという手段が最適だと判断したの?
859 :
例えば、映画ジャンル1、映画ジャンル2、映画ジャンル3とあり、適合度順に123が決まり、
ある映画タイトルは(1やくざ、2エロ、3なごみ)とあったり、またある映画は(1エロ、2なごみ、3犬)とかあったとします。
つまり、ジャンルは有限個ですが、順序がある組み合わせです。
その他にも評価とかDVD価格とかあるとします。
ここで疑問なのですが、ユーザーが評価の☆の数と価格とその他いくつかの条件と一緒に、ジャンルを検索するとします。
例えば、ジャンルやくざ(データベースでは数字)で検索すると思います。
この時、インデックスがきかなくなるorを避け、ジャンル列1~3のどれかにやくざと入力されているものを探すにはどうすれば良いでしょうか?
カバリングインデックスを効かせたままこういった検索をする方法が知りたいです。
860 :
>>859
IN句で何とかできればやりやすいのだが
賢者の到来を待つ
861 :
技術的に解決は無理でしたが政治的に解決されました
ありがとうございました
862 = :
アベノミクス!!
863 = :
847は政治的に問題はなかったことにしたみたいだけど、
純粋に技術的に解決しようと思ったらどんな手があるかな。
Table1 [id][col1][col3]
Table2 [id][col2][col3]
SELECT Table1.col1, Table2.col2
FROM Table1
INNER JOIN Table2 ON Table1.col3 = Table2.col3
cardinalityが十分に高いという前提であれば、
それぞれのテーブルのcol3への単独インデックスと、
Table1(col3, col1), Table2(col3, col2) という
複合インデックスを張るという手が有効じゃないかと気がするんだけれど、
どうなんだろう?
864 :
>>859>>863
ボビーオロゴンです
わたしもこの問題は気になります
join時のindexの最適化
865 = :
Sakilaって名前が絶望的に嫌いなんだが
なんとか出来ないものか...
866 = :
MySQLの memcached インターフェイスって使ってる人?
867 = :
海外の方ですか?
868 = :
mariadb-5.5.39-winx64.msiをinstall後
設定を一度終わらせDBとして走らせたのを確認後
PCを再起動して
HeidiSQL起動するとさっき迄問題なかったのに
sql error (2003) in statement #0 can't connect to
mysql server on"127.0.0.1"(10061)
と表示され新規でのDB登録もできなくなってしまうのですが
対処方法教えていただけないでしょうか?
879 = :
-Aで追加してるんだから
それより前の評価順で弾かれてるんじゃないのか
880 = :
>アドバイスありがとうございました。
アドバイスってほどのものでもないんで
iptablesの問題だと判ったのであれば/etc/sysconfig/iptablesの内容を
変に加工せずに全部晒せばちゃんとしたアドバイス得られるかと
881 = :
load data infile構文でデータをインサートした際にエラーが出た場合、エラー内容(エラーコードやメッセージ)を別に用意したテーブルに格納したいのですが、
どうやって取得すればいいでしょうか?Show warningsで直前の警告やエラーが取得出来ることは分かりましたが、調べても見つけることが出来ません・・・
バージョンは5.1.3.6です。
882 = :
テーブルに格納する前にエラーを無くす方が先決だと思うのだが
883 = :
>>882
すいません、今のところloda data infileで問題無くテーブルへインサート出来ているんです。
ただ、この先何かしらエラーは出てくるだろうから、それらのエラーコードやメッセージを保管しておきたいとなりました。
そのうえでわざと間違いをしてエラーコードがどこから出てくるのか、それは取得可能なのかを知りたいんです。
show warningsの結果もどこに格納されているの変わらない、一時テーブルのような物なのかそれともログファイルか何かに記録されていて、
それらをインサートのたびに読み込んでDBに突っ込むのか分からない。
エラーが出る際に戻り値の様な物が戻ってくるのか、それを取得してエラー内容を引きずり出す必要がありtお思う真sいた
吸いません、酔っ払ってるんで文章めちゃくちゃですがお許しください。
884 = :
http://www.oracle.com/technetwork/jp/ondemand/database/mysql/mysql-perftun-1484759-ja.pdf
885 = :
HTML5で業務アプリケーションを作ろうと思っているのですが、文字コードは何を選択するのがベストでしょうか?
全角 = 2バイト、半角 = 1バイトと考えている人が多く、UTF-8を使おうか悩んでいます。
889 = :
別に論外じゃないけどな。
仮に論外ならユニコード定義外の文字でも入力出来なきゃ駄目だろ。
現実的に可能な範囲でベストを尽くすべきという意味においては同意だけど。
890 = :
全テーブル全カラムを対象に
日本語(というか非アスキー)が含まれているテーブルの
一覧を作りたいんだけど
どうしたらそれなりに高速に調べられるかな
891 = :
1000件ぐらいまでだったら普通に検索しても速度は変わらないと思うけど
10万件を超えるのなら Mroonga の導入を検討するとか
892 = :
揚げ
893 = :
生物の生育範囲のような、例えばpH1.0~3.3というような、幅のある条件をもつ複数の生物を
条件検索で絞り込ませるDBはどのように作ればいいのでしょうか。
pHの欄に、1.0、1.1、1.2・・・・3.2、3.3などと延々入力しておかなければならないのでしょうか。
これだと幅が広い領域を持つ生物の時はとても手間がかかります。
もっとスマートなやり方があるのでしょうか。
894 = :
最小と最大入れて範囲指定で検索でいいと思うが
895 = :
データベースの最小値欄に1.0、最大値欄に3.3と入力しておくだけで、
範囲指定の検索ボックスで、下限が3、上限が5 と指定すれば、>>893であげた
生育条件(pH1.0~3.3)の生物を結果として出してくれる?
生育pH3.1~5.7のような生物Pがいた場合、下限3、上限5と条件検索すれば、
これも同時に結果に出してくれるのでしょうか。
896 = :
http://www.rsch.tuis.ac.jp/~nagai/SYS/SYS22.html
この例のように、1つのアイテムが1つの固有値を持つものは、where文で
範囲指定すればいいとわかるのですが、上記のように
1つのアイテムが、幅のある数値を持つものはどうすればいいのか悩んでいます。
pHというフィールドの中に1.0from3.3と入れたらプログラムは理解してくれますか。
それともminとmaxというフィールドをそれぞれ作って1.0、3.3という値を入れておくのでしょうか。
897 = :
もちろん情報が2つあるんだから2項目にminとmax入れておくんだよ
もしかして検索条件も範囲なの?
その場合、すこしでも重なってたらひっかかるのか、完全に内包されてる場合だけなのか
とかいろいろ条件あると思うんだけど、必要な要件並べてみてよ
898 = :
>>897
ありがとうございます。そうです、検索条件も範囲です。
複数の生物についてデータベースを作り、同一の生育条件のものを拾い出すデータベースです。
例えばメダカは絶対に水温25℃ぴったりじゃないと死んでしまうってことはなく、
生きられる水温に幅がありますよね。
そのように、似たような条件で生きられる生物は他にもいろいろいるわけですが、
それらを条件検索で絞って出てくるように作りたいのです。
なので検索条件は、重なる部分を少しでも内包するものを拾う必要があると思います。
899 = :
カラムが minvalue maxvalue とすると
特定の値が範囲内かは、
値 BETWEEN minvalue AND maxvalue
で探せるから
最小値 BETWEEN minvalue AND maxvalue
と
最大値 BETWEEN minvalue AND maxvalue
をORでつなげば重なり、ANDでつなげば内包になるんじゃない?
まあいろいろ試してみて
900 = :
あーあと範囲が検索範囲より両側とも大きい場合を含めるなら別にその比較もいるね
みんなの評価 :
類似してるかもしれないスレッド
- MySQL 総合 Part25 (947) - [94%] - 2017/6/18 6:30
- MySQL 総合 Part14 (1001) - [94%] - 2008/11/23 10:17 ☆
- MySQL 総合 Part23 (992) - [94%] - 2013/8/11 17:00
- MySQL 総合 Part22 (1001) - [94%] - 2012/7/10 16:45
- MySQL 総合 Part26 (860) - [94%] - 2023/2/2 9:30
- MySQL 総合 Part21 (1001) - [94%] - 2011/12/25 22:16
- MySQL 総合 Part20 (995) - [94%] - 2011/10/17 4:48
- MySQL 総合 Part12 (1001) - [89%] - 2008/1/30 17:34 ○
- MySQL 総合 Part18 (986) - [89%] - 2011/1/17 15:46
- MySQL 総合 Part13 (996) - [89%] - 2008/6/10 21:02 ☆
- MySQL 総合 Part15 (1001) - [89%] - 2009/4/20 12:15 ☆
- MySQL 総合 Part17 (1001) - [89%] - 2010/6/10 20:47 ○
- MySQL 総合 Part19 (982) - [89%] - 2011/6/9 2:33
- MySQL vs PostgreSQL Part2 (941) - [36%] - 2022/5/26 1:30 ○
トップメニューへ / →のくす牧場書庫について