• ベストアンサー

idとするものをvarcharかintかで速度は?

単純な質問ですみません。 idを例えばアルファベット5~10文字程度にしたVARCHAR(10)とする場合と、tinyintにする場合では検索スピードはどちらが速いのでしょうか? idの種類は多くても10種類くらいです。 レコード数は50万件くらいあります。 アルファベットのidを数値にするとは、例えば apple → 0 orange → 1 banana → 2 というような感じです。 また、idをもしtinyintにした場合、phpMyAdminなどでレコード表を確認した場合、何のidかわかりにくいですが、これは仕方ないのでしょうか?

  • suffre
  • お礼率76% (2013/2633)
  • MySQL
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

本質的にidというのはレコードを特定するためのものなので インデックスが利いていれば基本的にスピードの差はほぼでないでしょう >apple → 0 >orange → 1 >banana → 2 実務上idに意味のある単語などを用いることは危険です。 appleとしたものの実はgreen appleだったりする場合もあるでしょう idを意味のない数字でもっておけばあとからいくらでも修正が利きます >phpMyAdminなどでレコード表を確認した場合、何のidかわかりにくいです リレーションの設定で外部キー制約をつけておけば、所定のコードをクリックして リンク先へ飛ぶことができますよ (仮に上記の例であれば0をクリックしたときappleのデータを表示させられる) ちなみにidに0を利用するのはお勧めできません 1以上の整数を利用してください (他のプログラムとの組み合わせの際,0は特別な意味を持つケースが多いため、 たとえばfalseだったりnullだったり,空文字だったりする)

suffre
質問者

お礼

ありがとうございます! 詳しくご説明くださって感謝します。 速度的にはそれほど問題ないのですね。 今回はIDを数値にすることにしました。 IDから先は特に情報はいらないので外部キー制約などは付けれませんが自分で管理したいと思います。

関連するQ&A

  • varcharの比較

    こんにちは。 DBのテーブル(test_tbl)が ID varchar update varchar となっているときにupdateがたとえば20040501よりもあとのものをJSPで表示させたいとします。その場合、数値型にしないと比較はできないのでしょうか? varcharどうしで比較する方法があると聞いたのですがどうやるのかわかりません。 (データ) ID   update 1 20040410 2 20040612 3 20040520 のときはIDが2と3のみ表示させたいのです。 よろしくお願いします。

  • アクセスでフィールド定義 データ型について

    テーブルのフィールドの定義で テキスト型 ・メモ型 ・数値型  ・  ・ とあります 一方、SQLのフィールド型では int varchar tinyint など、あります これら双方の比較表を探しています よろしくお願いします

  • 種別カラムのデータ型について

    MySQLバージョン4.1.16を使用しています。 数種類の種別(青が1、赤が2、緑が3として)を保持するカラムの場合、 そのデータ型はTINYINTなのか、VARCHAR(1)なのか、どちらが良い方法なのでしょうか? それとも(青をblue、赤がred、緑がgreenとして) VARCHAR(10←(少し多めに確保))として英字(blue、red、green)を 保存するやり方もあるのでしょうか? テーブル「好きな色」(TINYINTの場合) +----------+---------+ |  人_id   | 色の種別 | +----------+---------+ |  田中   |   3   | +----------+---------+ |  鈴木   |   1   | +----------+---------+ テーブル「好きな色」(VARCHAR(1)の場合)←この場合は 文字として数字を保存することになるのでしょうか? +----------+---------+ |  人_id   | 色の種別 | +----------+---------+ |  田中   |   3   | +----------+---------+ |  鈴木   |   1   | +----------+---------+ テーブル「好きな色」(VARCHAR(10)の場合) +----------+---------+ |  人_id   | 色の種別 | +----------+---------+ |  田中   |  green | +----------+---------+ |  鈴木   |   blue | +----------+---------+

    • ベストアンサー
    • MySQL
  • ランキングシステムについて

    ランキングシステムを作っているのですが はじめに作ったときは それぞれの項目毎に一つのファイルを作って、そこに数値を記入していたんですが(こんなふうに) 好きな食べ物は? ファイル名 apple.txt 数値 5 ファイル名 banana.txt 数値 8 ファイル名 orange.txt 数値 6 データファイルを一つにして、そこからデータを読み込んだり編集したりしたいと思っているんですが(こんなふうに)、読み込んで画面上に出力することは出来るんですが、編集が上手くいきません data.txt 一行目 apple<>5 ニ行目 banana<>8 三行目 orange<>6 なにか上手い方法があったら教えてください

    • 締切済み
    • PHP
  • ラジオボタンによる内容の振り分け

    お世話になります。 他の方が作ったファイルを修正しないといけなくなり、本当に悩んでます…。お願いします。教えてください。 ラジオボタンによるフォームの振り分けをさせたいと思っています。 [HTMLファイル(fruit.html)] まずラジオボタンが以下のようになっています。 <input name="種類" type="radio" value="アップル" onclick="jobShow('apple');jobHide('banana');jobHide('peach');jobHide('berry');jobHide('grape');jobHide('lemon');jobHide('melon');jobHide('orange');" id="item1" checked="checked" />アップル <input name="種類" type="radio" value="バナナ" onclick="jobHide('apple');jobShow('banana');jobHide('peach');jobHide('berry');jobHide('grape');jobHide('lemon');jobHide('melon');jobHide('orange');" id="item2" />バナナ <input name="種類" type="radio" value="ピーチ" onclick="jobHide('apple');jobHide('banana');jobShow('peach');jobHide('berry');jobHide('grape');jobHide('lemon');jobHide('melon');jobHide('orange');" id="item3" />ピーチ <input name="種類" type="radio" value="ベリー" onclick="jobHide('apple');jobHide('banana');jobHide('peach');jobShow('berry');jobHide('grape');jobHide('lemon');jobHide('melon');jobHide('orange');" id="item4" />ベリー <input name="種類" type="radio" value="グレープ" onclick="jobHide('apple');jobHide('banana');jobHide('peach');jobHide('berry');jobShow('grape');jobHide('lemon');jobHide('melon');jobHide('orange');" id="item5" />グレープ <input name="種類" type="radio" value="レモン" onclick="jobHide('apple');jobHide('banana');jobHide('peach');jobHide('berry');jobHide('grape');jobShow('lemon');jobHide('melon');jobHide('orange');" id="item6" />レモン <input name="種類" type="radio" value="メロン" onclick="jobHide('apple');jobHide('banana');jobHide('peach');jobHide('berry');jobHide('grape');jobHide('lemon');jobShow('melon');jobHide('orange');" id="item7" />メロン <input name="種類" type="radio" value="オレンジ" onclick="jobHide('apple');jobHide('banana');jobHide('peach');jobHide('berry');jobHide('grape');jobHide('lemon');jobHide('melon');jobShow('orange');" id="item8" />オレンジ そしてその下にそれぞれの項目のフォームがすべて並べてあります。 <h4>アップル</h4> <table width="576" border="0" cellspacing="1" cellpadding="0" class="common-table"> <tr> <th width="20%">商品名</th> <td><select name="商品名1" id="apple1"> <option value="">商品をお選びください</option> <option value="アップル1">アップル1</option> <option value="アップル2">アップル2</option> </select></td> </tr> <tr> <th>個数</th> <td><input name="個数1" type="text" size="5" id="apple2" />個</td> </tr> </table> </div> <div id="banana"> <h4>バナナ</h4> <table width="576" border="0" cellspacing="1" cellpadding="0" class="common-table"> <tr> <th width="20%">商品名</th> <td><select name="商品名1" id="banana1"> <option value="">商品をお選びください</option> <option value="バナナ1">バナナ1</option> </select></td> </tr> <tr> <th>個数</th> <td><input name="個数1" type="text" size="5" id="banana2" />個</td> </tr> </table> ・・・(オレンジまで続く) [javascriptファイル] window.onload=check; function check() { if(document.estimate.item1.checked) { jobShow('apple'); jobHide('banana'); jobHide('peach'); jobHide('berry'); jobHide('grape'); jobHide('lemon'); jobHide('melon'); jobHide('orange'); } if(document.estimate.item2.checked) { jobHide('apple'); jobShow('banana'); jobHide('peach'); jobHide('berry'); jobHide('grape'); jobHide('lemon'); jobHide('melon'); jobHide('orange'); } ・・・(item8まで続く) } こんな感じです。説明不足なのかもしれませんが、文字制限があるので全部かけそうにありません>< もしこの説明で分かる方いらっしゃいましたら、教えてください。 宜しくお願いします。

  • varcharでの最大値抽出

    すいません。お教えください。 Mysql5.0.15で以下のテーブルを作成した時、数値の最大値(1010)を抽出したいのですがどのようにすれば抽出できるのでしょうか?お教えください。 テーブル名:B フィールド名,フィールドタイプ,備考 b_id,int(10),auto_increment b1,varchar(10) b_id,b1 1,999 2,1000 3,1000-1 4,1010 5,800 重ねて質問させてください。 select max(b1) from b;とした場合 999としか表示されません。 これもなぜなんでしょうか。

    • ベストアンサー
    • MySQL
  • 配列の中身を順番に可変長定義関数に渡すには

    好きなだけ引数が渡せる関数があり、その引数に任意の配列の中身をeval関数を使わずに一つずつ渡したいのですが、どうすればいいのでしょうか。eval関数を使った場合は以下のような感じです。 $list=array("apple","banana","orange"); function hoge(){ print_r(func_get_args()); } $arg=implode ('","',$list); eval('hoge("'.$arg.'");');//hoge("apple","banana","orange"); よろしくお願いいたします。

    • 締切済み
    • PHP
  • エクセルでの合計計算について

    エクセルで集計について質問がございます。 サポートいただけると大変助かります。 【状況】 A列        B列    C列 ・・・続く Apple       10    100 Orange      20    110  Banana      30    120 Apple       40    130 Peach       50    140 ・ ・ ・ 続く ------------------------------------------------------ この状況で、B列やC列に対して、それぞれの列の合計を求めて、表の下に表示させたいと考えております。 イメージとしては、以下の様な形です。           B列   C列 「Orange」以外  130   490 「Orange」    20    110 上記の通り、 1. 「Orange」以外の合計 2. 「Orange」の合計 を求めたいと考えております。 1.の場合、 A列に「Orange」と記載がある場合のみ、Orangeの値「20」や「110」を除く他の数字の合計を算出したい。 2.の場合、 A列に「Orange」と記載がある場合にのみ、「20」や「110」といった数字が合計値として算出されるようにしたいと考えております。 sumifで何とか対応しようとしておりますが、中々うまくいきません。 困っている理由として、 A列のAppleやOrangeと言った項目の順番が固定ではないことです。 状況によって、Appleが先に出てくることもあれば、逆に、Orangeが一番上に出てくることもあります。 説明がうまく出来ておらず、大変恐縮ではございますが、お力添えをいただけると大変助かります。 よろしくお願い申し上げます。

  • phpMyadminを利用してのデータのインポート

    さくらサーバを利用しています そのサーバにあるphpMyadminの利用で質問させてください テーブルAにレコードA1~A1000までの1000件のデータがあります そこに1001件目のレコードを追加したいのですが、フィールドが 700項目程度あり、そこに1項目ごと入力するのが大変なので、 A1~A1000のデータの中から、類似の1つのレコードをCSVでダウンロードして パソコン側でそのデータを修正してアップロードしたいと思います そこでphpMyadminを利用しての次のような手順でデータ操作しようと思っています phpMyadminのメニューにあるエクスポートで該当のレコードをPC側に抽出し そのデータをエクセルで必要な所を修整します そして、A1~A1000にないID番号を振り、そのデータをphpMyadminで インポートさせようと思います そこでお聞きしたいのは この1件のデータをインポートをさせた時、サーバ側にある1000件のデータにプラス されて1001件になるでしょうか それとも、1000件の上にインポートされたデータがかぶせられて、1000件の データがなくなり1件になってしまうのでしょうか 自分では前者のように1001件になると思うのですが万一後者になったら 大変なため質問させていただきました よろしくお願いします。

    • ベストアンサー
    • MySQL
  • phpMyAdminの主キーについて

    phpMyAdminを用いて、MySQLを管理しております。 例えば、 ユーザーid  int ユーザーpw  int ユーザー名  varchar(20) 住所     varchar(30) 電話番号   varchar(10) 備考     text というように管理しております。 上記の場合ですと、主キーはユーザーidにのみ設定したいのですが、 int、varcharのデータ型にすると自動的に主キーが設定されてしまいます。(操作欄で主キーのアイコンがアクティブになる。) textですと主キーになりません。 主キーを解除しようとしますが、 #1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key というメッセージがでて解除できません。 主キーの設定はされていても、自分で主キーを設定したid以外は、同じ値を複数のレコードで保持できるので、問題はないのですが、これはどういう現象なのでしょうか?

    • ベストアンサー
    • MySQL