- - PR -
char型のプライマリキーとVarchar型のプライマリキー
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-12-22 14:00
いつもは意見させて頂いております。
少々、疑問に思ったもので皆様のご意見をお聞かせ頂きたいと思い、 投稿させて頂きました。 私が新人の頃は、データベースのプライマリキーに文字列を割当てる場合、 Char型を割当てるのが一般的だと先輩から教わりました。 現在では、プライマリキーに文字列を割当てる場合の多くがVarchar型を割当てています。 (私の周りのプロジェクトだけかもしれませんが・・・) プライマリキーに対し文字列を割当てる場合、Char型、Varchar型で速度等の違いが出るのでしょうか? また、OracleやSQL Server等のデータベースの種類によっても異なるのでしょうか? 私自身は、数値コードの0フォーマット等、フォーマットを割当てる場合は、 Char型を使用していますが、英字等の任意のコードを使用する際にはVarcharを 割当てるようにしています。 これは、顧客の要件によって変えています。 今更ながらの質問で大変申し訳ありません。 ご存知の方がいらっしゃいましたら情報をお願いします。 あまりにも基礎的な事(?)なので、情報が少なくてこれだと言う回答がありません。 よろしくお願い致します。 | ||||||||||||
|
投稿日時: 2006-12-22 14:47
確かに若干CHARの方が早いときが多いでしょう。ですが、CHARもVARCHARも同じくらい遅いです。本当に速度が問題になるなら、数値型を割り当てます。
当然あるでしょうね。
普通は、格納するのが英字か数字かで使い分けたりはしないでしょう。 CHARとVARCHARの違いは分かっているでしょうか?CHARは固定長文字列、VARCHARは可変長文字列です。CHAR(4)型のフィールドに'AB'と言う文字列を格納すると、'AB 'と言う文字列に拡張されます。再度読み出したときには、'AB 'に変化してしまいます。逆にVARCHAR(4)では'AB'のままになります。 また格納するのが数値であることが分かっているなら、文字列ではなく数値として格納するでしょう。'1'と'0001'と1の違いを意識しながらコーディングなんてしたくないですからね。 | ||||||||||||
|
投稿日時: 2006-12-22 15:04
こんにちは。
SQL Server だと、サイズの小さなデータ型を使用するとページ分割が起こりにくくなる(ページロックによるパフォーマンスの低下を抑制できる)という点でchar型よりvarchar型の方が有利な場合があるはずです。 _________________ 上本亮介 (ue) @ わんくま同盟 Microsoft MVP for VSTO (Jul 2008 - Jun 2009) Hello Another World! .NET 勉強会 / ヒーロー島 | ||||||||||||
|
投稿日時: 2006-12-22 15:23
甕星様、ue様、回答ありがとうございます。
甕星様の仰るとおりですね。 私は、現在設計をする際には数値型のPKを作成し、ユニーク制約を付与したCDのような物(Varchar)で顧客の入力等を促しております。(マスタ系等) この設計手法に反対意見もあると思いますが、ここでは議題に外れかねない為、説明は省かせて頂きます。 また、甕星様、ue様のお話しの通り、文字列型の速度は数値型に比べ遅いとは思っていましたが、 CharとVarchaの差異は意識するほどの物ではないのかもしれませんね。 本来であれば、教えて頂いた先輩に意図を聞くのが筋なのでしょうが、 その先輩は既に連絡が取れない状態になっている為、皆様のお知恵を拝借させて頂きました。 情報を頂きました皆様、本当にありがとうございました。 | ||||||||||||
|
投稿日時: 2006-12-22 16:05
RDBの実装によって内部のデータ型がtext/varchar/charで同じものもあったりします。
ですので速度を意識するのではなく、 データ型とキーの意味を意識して設計すべきでしょう。 | ||||||||||||
|
投稿日時: 2007-01-07 00:27
MySQLや私が知っている国産RDBMSでは、固定長のデータ型だけで表を構成すると、
性能向上させることができます。 | ||||||||||||
|
投稿日時: 2007-01-07 13:10
この手の質問は良く見かけるけど、データのタイプより テーブル構造や索引の使われ方、結合条件などの要素の方がはるかに支配的なのでは?
|
1