[SEO] SEO対策に取り組む前に。。。

今までSEO対策は興味が沸かずなおざりに済ませてきたが、そうも行かなくなってl来たので
SEO対策をこれから学ぼうと考えています。。。そこで、ちょこちょことメモを取り始めます。

ちなみに、SEO対策については噂に聞いていた程度ですので、本文を書く前に少し調べてみたのですが、全貌がはっきり判りませんでした。
そこで考えを整理するために現状(2012/05/25現在)の整理から行います。。。。

まず、SEO対策とは。。。(おいおいってそこからか?)

 インターネット利用者は、インターネットから何らかの情報を得たい時に検索サイト(YahooやGoogl)で検索します。
 インターネット利用者は、あまた有るホームページの中から上位に表示されるホームページを見て目的の情報を探し始めます。
 目的に沿った情報が十分に見つかると、それ以外のホームページは見てもらえません。
 ですからここで言う上位とは、検索内容によりますが、3位以内とか、1ページ以内とか、多くても3ページ以内とかになります。
 (根気の有る人なら。。。10ページくらい覗きに行くかもなぁ^^;)
 ホームページを見てもらうためには、上位に表示されないと見て貰えないってことです。。。
 そこでSEO対策が重要になってくるってと思います。
 特にインターネット通販のような集客に大きく左右されるホームページの場合は、死活問題ですからね。

 SEO対策の目的は、ホームページがインターネット利用者の目にとまるように検索で上位に持ってくること。
 SEO対策とは、その対処方法を指します。
 SEO対策を施してなくても、上位に表示されれば問題ないのですが、そう上手くは行かないですよね。。。

■日本での検索サイトは?
 現在の日本でインターネット利用者が使用しているは概ねYahooかGoogleを使用していると思います。
 YahooがGoogle検索エンジンを利用しているためGoogle検索のみに対してSEO対策を行うものと考えて良いと思います。
 Bingとかも有りますが、あまり重要視されていないようですので。

■GoogleはSEO対策をどう思っているか?
 GoogleがSEO対策についてどう思っているか少し調べました。
 「検索エンジン最適化スターターガイド」というものが公開されています。
 GoogleはSEO対策として次の2つが柱ということが分りました。

  1. Googleクローラーが理解しやすく、オリジナルコンテンツを豊富にする対応策
  2. 他のホームページからリンクされるような社会に貢献できるコンテンツ作り

 Googleの言い分については、コメントは不要と思います。
 が、クローラーってなに?って思った方、もう少し後で説明しますが、もう少し読み進めてね。m(_ _)m
 ちなみに、SEO対策を行うなら、Googleが出している「検索エンジン最適化スターターガイド」を熟読する必要が有ります。

■SEO対策側はSEO対策をどう考えているのか?
巷にあふれているSEO対策会社がどう言っているかを少し見てみました。
あくまでも、SEO対策ビギナーの私見ですので、そのつもりで読んで下さい。

  1. 正しいHTMLを書いたり、豊富なコンテンツにすることが前提
  2. それだけでは、足らない。上位を狙うならSEO対策は必要
  3. まともなSEO対策を施せないところが多いから注意
  4. 自分の所はプロだから任せておけ
  5. 費用は検索上位に上がってからの成功報酬だから安心。ほら、信用できる会社でしょ!
  6. Googleにペナルティを食らわない程度に、多少ブラックな行為も必要
  7. お金を掛けないと他所に負けちゃうよ。SEO対策は素人には無理

まぁ、その他では、「このテンプレートだけでOK」とか「最適なキーワドを見つけることが重要」とか有りました。
具体的なSEO対策に触れないのは、良くSEO対策は企業秘密だから。
悪く言うと、ノウハウがそこまでないってSEO会社も多いってことでしょうか。
はっきり言うと。。。胡散臭さプンプンの会社も多いです^^;;;

SEO対策を生業としない一般SEO対策者が書いているSEO対策ホームページでは、いくつかのヒントが提供されていました。
どんな物が有ったかを挙げてみます。

  1. 検索エンジン登録
  2. コードの修正。HTMLが正しいかチェックする
  3. 検索キーワドの設定。metaタグの追加
  4. リンクを増やす。外部リンク・内部リンクとも(リンクポピュラリティー)
  5. わりやすいtitleやdescriptionの設定
  6. ページを増やす
  7. hタグを活用する
  8. 文書内にキーワードの出現率を上げる(テキストマッチング)
  9. ウェブマスターツールとGoogle Analyticsの活用
  10. その他、ブラックな方法

この他にもいろいろ有ったのですが、、、もう少し学習してから、まとめます。

調べていて思ったことは、SEO対策会社もSEO対策一般人も根っこは同じ事を言っているようです。

SEO対策会社は具体的な内容を公開していませんでしたが、端々でてくるニュアンスは同じでした。
「うちは経験で培われたノウハウが有る」と。
どうもそのノウハウは、HTMLの書き方と外部リンク提供のようです。
「サテライトサイトを作成して外部リンクを貼ります」とか
「OLDドメインを使用しますとか、ページランキングの高いサイトからリンクを張ります」とか
その他、最適な「キーワード」を見つけますとか。。。も書いて有りました。
これらのサテライトサイトやOLDドメインについても、のちのち整理して行きたいと思います。

一般人SEO対策者たちは、基本的にHTMLやコンテンツ文書の書き方の指南が多かったです。
この指南の内容は、具体的に例を挙げてHTMLの書き方を説明してくれたり、
、外部リンクを効率良く貼りつけて貰う方法とか載っており参考になりそうでした。
ここでリンクを張って紹介も良いのですが、偏りが怖かったので貼りませんでした。

両者とも、HTMLやコンテンツの書き方を最適化しなさいと言っています。
最適化するということは、Googleが言っている「Googleクローラーが理解しやすい」に対応していきます。
両者の外部リンクを貼ってもらいないさいと言っています
これは「他のホームページからリンクされるような社会に貢献できるコンテンツ作り」に対応しているようです。
結果、「Googleさんの言うとおり~」にしようってことですね。

■Googleさんの言うとおりにするのは判ったのですが。。。
ここでSEO対策ビギナーの私は、「Googleクローラーが加点しやすい対応策が重要!」ってことが理解できました^^
が、先程も出てきたGoogleクローラーなにもの?
それに、加点は「HTMLや文章・コンテンツの内部加点」と「外部からのリンクによる外部加点」が有りそうですが。。。

クローラーについて調べました。
クローラーとは、インターネットに公開されているホームページを巡回して、どこにどんなホームページが有るかを収集するプログラムです。
クローラーの活躍の結果、Googleのデータベースにそのホームページの情報と他のホームページとの関係とともに格納されます。
Googleは利用者が検索した際、その検索キーワードに最も有用なホームページを表示するために、その情報を使用します。
ちなみに、クローラーによって収集されてホームページはインデックスされたという表現で検索対象になります。
クローラーに見つけてもらっていないホームページは、インデックスされておらず検索の対象になりません。
ですから全ての新規のホームページやページは、SEO対策の前にクローラーに見つけてもらう必要が有ります。

で、このクローラーが検索順位に関係するどのような情報を格納するかですが、
Googleは検索順位に関する計算?アルゴリズムの概要は公開(どこかの大学の先生が特許を取ってるようです)しているようですが、詳細は未公開ということです。
クローラーやその他の機能によって集められた情報をどう解釈し計算し検索順位にするか、、、不明です。
また、「ペンギンアップデート」とか「パンダアップデート」と命名されているものも有ります。
それは、アルゴリズムの変更なのか、フィルターなのか判りませんが、ペナルティを課す仕組みのようです。
これらの仕組みも公開されていません。

ペナルティを課す?って思った方。。。私も思いました。
これはどうやら、ブラックリンクを採用したSEO対策へのGoogle側の対応みたいです。
インチキ臭いことをして上位に上がっているホームページを落とす仕組みということですね。

長文になったのでこのへんで現状整理を終わりにします。
まだまだ、まとめなくてはいけない事柄が残っていますが、宿題ということで。

■まとめ
巷で言うSEO対策は、主に「Googleクローラーが加点しやすい対応策」のようです。
いろいろな対策が有るようですが、Googleが言っているように対策の観点は2つ。
●Googleクローラーにわかりやすく、加点してもらえるように書く(内部加点)
  自分の努力でどうにかなるのは、内部加点の方ですね。
  まずは、ここから一般SEO対策者のヒントを元に整理を始めたいと思います。
●外部からのリンクを増やす(外部加点)
  外部加点は、自然増を待っているのは無意味な気もしますし、、、ブラックな方法で増やすとペナルティが有るし、金もかかるし
  ブラックな方法はとりあえずは置いておいて、まっとうな外部リンクの有効性を少しずつまとめていければと思います。
●SEO対策会社は本当に有効なSEO対策を持っているか。。。
  はっきり言って、対策内容は一般SEO対策者と同じと考えています。
  違いは、有効性の検証を行ったかどうかだと考えています。
  有効性の確認の方法は、ぱっと思いつく範囲ですが
    ・意味のない内容で同じような構成のホームページを多数作成する
    ・少しづつ条件を変えて、順位の差を検証する
    ・検証を繰り返すことで、おおよその見当が付けられる
  一般SEO対策者でも実施している方もおられるかも知れませんが、大規模に実施は難しいでしょう。
  
書きなぐった文章なので、読みづらかったと思います。
最後まで読んでいただき有難う御座います^^
では、また^^

カテゴリー: SEO

スマホのデジタルコンパスって凄いね

開発備忘録では有りません^^;

私はスマホを持ってないのですが、同僚のスマホのデジタルコンパスを見て凄いなぁって思いました。
どうやって実現しているんだろうかと思い、ググったところ、地磁気センサーICというものを利用しているらしいです。
加速度センサーといい、地磁気センサーといい、面白い物が沢山ありますね。

スマホ欲しいなぁ。。。。
以上、気になったので書き込みました^^

[Mouse without Borders] 複数のPCを1つのマウスとキーボードで

複数のPCを1つのマウスとキーボードで

最近、「Mouse without Borders」というツールを使っています。

開発環境は、PC2台で、
1台は開発ツール画面を表示させ、
1台はテスト用&インターネットで調べる用にしています。

そんな場合、Mouse without Bordersを使用すると、
1セットのマウスとキーボードで両方のPCを操作することができます。
その他、Version2.1.0.9では以下の特徴が有ります。(2013/11/28日現在は、2.1.2.1212)

  1. クリップボードを共有できます
  2. デスクトップのMouseWithoutBordersフォルダーにファイルのコピーがドラッグ&ドロップで簡単にできます
  3. 4台まで接続可能
  4. 無料で使用できます
  5. .NET Framework2.0が必要です

設定やその他の機能はいろいろ設定説明をしてくれてるホームページが
あるので、インターネットで検索してみてください。
ちなみに、設定画面はこんな感じです。

Mouse Without Borders設定画面

Mouse Without Borders設定画面


ダウンロードはここまで
リンクが切れていたりバージョンアップされてたりするかもしれないので、検索して探して下さい。
私はそのまま使ってますが、日本語化ツールも有るそうです。

以上、便利ツールの照会まで。

※2013/11/28日
 2013/1/28日に2.1.2.1212バージョンがリリース。
 Windows8にも対応するようになったみたいです。
 Frameworkは20./4.0のどちらかが必要となっているようです。

[SQL Server] 2012 FILETABLEを少し試してみる

SQL Server 2012のFILETABLEを少し試してみました時の備忘録です。

まず、FILETABLEって?ですが、実は私もほとんど判ってません^^;
ですので、試してみようってことです。。。あしからず^^;;

で、基本的にどんな機能かというと、
SQL Server 2008からのFILESTREAM機能を利用して、ファイルシステムの
ファイルをDATABASEに保存するものです。

うーん・・・という感じですが、使用局面は、
ファイルサーバに共有ファイルをおいておきた場合、古いファイルが整理もつかずに
どんどん溜まっていきませんか?
そんな時、DB内にファイルが置いてあると、ファイル作成日、最終更新日、最終アクセス日
を条件に不要と思われるファイルを(バックアップをして)削除したり、他の場所に移動したり
通常のデータのように管理ができます。
ファイルシステム管理のバッチやスクリプトで同じ事をするよりも、簡単に管理ができるか
なってとこが考えられます。
その他、きっといろいろなメリットが有る?と思います^^;;
まだこれから試すので・・・詳しくは・・・

それから、ファイルの保存はプログラムからでもWindows操作(ドラッグ&ドロップ)でも
どちらでも可能です。試してませんが。。。
ディレクトリは、\\サーバ名\Windows共有名\ディレクトリ名でネットワークディレクトリの
ように表示されますが、直接編集とかはできません。一度、どこかにコピーしてそこから
編集する操作に成ります。編集後の保存は元のディレクトリに戻してあげます。

FILETABLEを使用するためには幾つかの手順を踏む必要があります。
[SQL Server] 2012 FILETABLEを使うためにFILESTREAMの有効化

[SQL Server] 2012 データベース レベルでの FILESTREAM ファイル グループの指定

を参考にしてください。

その後、下の様な作成SQLを流せば、準備完了です。
USE TEST
GO

CREATE TABLE FileTable01 AS FILETABLE
WITH
(
FILETABLE_DIRECTORY = ‘DocumentTable’,
FILETABLE_COLLATE_FILENAME = database_default
)
GO

CREATE TABLE FileTable02 AS FILETABLE
WITH
(
FILETABLE_DIRECTORY = ‘開発DOC’,
FILETABLE_COLLATE_FILENAME = database_default
)
GO

ちなみに、作成したテーブルを[SQL Server Management Studio]で右クリックして
[FileTabelディレクトリの検索]をクリックすると、作成したFILETABLEのディレクトリが
開き、ファイルの一覧が表示されます。削除などもできます。

とりあえず、ここまで。。。。

[SQL Server] 2012 データベース レベルでの非トランザクション アクセスの有効化

SQL Server 2012の機能のFILETABLEを使用するためには、
予め「インスタンス レベルでの FILESTREAM の有効化」 を実施した後、
データベース レベルでの非トランザクション アクセスの有効化が必要になります。
また、データベース レベルでの FileTable のディレクトリ指定も必要です。
この2つの処理は一緒にできます。

なぜ必要になるか?、私にも判っていませんが、必要だそうです。
そもそも、非トランザクションとは。。。というのも判っていません。
トランザクション処理を全く実行されないモード?という曖昧な感じで考えている程度です^^;

ちなみに、使用できる非トランザクション アクセスのレベルは、FULL、READ_ONLY、および OFF です。
OFF・・・・・・・・・・・通常。普通のトランザクションを実施するモード
FULL・・・・・・・・・・完全アクセス。制限なしでアクセスできるモード
READ_ONLY・・・読み取り専用アクセス。読み取り専用モード
。。。。。。だと思います^^;;;

また、ファイルシステムとして FIleTable にアクセスをする際に使用するパスは、FILESTREAM ディレクトリ名に指定します。

では、設定方法に
  既存のDATABASEに変更を加えます。
ALTER DATABASE TEST3
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N’C001′ )

  ちなみに、データベースのプロパティ設定画面からでも指定できます。
  その場合は、「オプション」の一番上にFILESTREAMが表示されていますので
  そのFILESTREAMディレクトリ名、FILESTREAM 非トランザクション アクセスを設定します。

  FILESTREAMディレクトリ名は、データベースの中で一意になるようにする必要が有ります。
  もし、幾つかに分ける場合、重ならないように設計する必要があります。

  新規のDATABESEの場合、以下のようにWITH FILESTREAM句を指定します。
   WITH FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N’C001′ )

以上で、データベース レベルでの非トランザクション アクセスの有効化が設定できました。

[SQL Server] 2012 データベース レベルでの FILESTREAM ファイル グループの指定

SQL Server 2012の機能のFILETABLEを使用するためには、
予め「インスタンス レベルでの FILESTREAM の有効化」 を実施した後、
データベース レベルでの FILESTREAM ファイル グループの指定が必要になります。
FILESTREAM は特殊なファイル グループを使用するので、データベースの作成時に少なくとも 1 つのファイル グループに対して CONTAINS FILESTREAM 句を指定する必要があるからです。

新規でDATABASEを作成する場合は、CREATE DATABASEからも指定できます。
下の例は、TEST2というDATABASEを作成し、FileStreamGroup1 というFILESTREAM ファイル グループを指定しました。
CREATE DATABASE TEST2
ON
PRIMARY ( NAME = TEST2,
FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\TEST2.mdf’),
FILEGROUP FileStreamGroup1 CONTAINS FILESTREAM( NAME = TEST2fs,
FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\filestream2’)
LOG ON ( NAME = TEST2log1,
FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\TEST2log1.ldf’)
GO

既存のDATABASEに追加する場合は、ALTER DATABASEを使用します。
下の例は、TEST3という既存のDATABASEに対し、
■FileStreamGroup3 というFILESTREAM ファイル グループを指定し、
ALTER DATABASE TEST3
ADD FILEGROUP FileStreamGroup3 CONTAINS FILESTREAM

■そのファイルストリームにfilestream3というファイルを追加しましましす。
ALTER DATABASE TEST3
ADD FILE
( NAME = ‘TEST3fs’,
FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\filestream3’
)
TO FILEGROUP FileStreamGroup3

ALTER DATABASEを使用しないで、データベースのプロパティ設定画面からも指定することもできます。
まずは、目的のDATABASEのプロパティ画面を開きます。
■ファイルグループを追加

1)左側メニューの「ファイルグループ」をクリック
2)FILESTREAMの追加をクリック
3)名前を入力
4)ファイルグループを追加できたので、次のファイル指定をするために左側メニューの「ファイル」をクリック
■ファイルの追加

1)データベースファイルを追加する為に、右下の「追加」をクリック
2)新たに行が追加されるので、その行のファイルの種類をFILESTREAMに指定
3)ファイルグループの指定は、先程上で作成したファイルグループを選択
4)パスを指定
5)最後に「OK」をクリック

以上で、DATABASEにFILESTREAM ファイル グループを指定することができました。

[SQL Server] 2012 FILETABLEを使うためにFILESTREAMの有効化

SQL Server 2012の機能のFILETABLEを使用するためには、
予め「インスタンス レベルでの FILESTREAM の有効化」 が必要になります。

その設定方法の備忘録です。

  1. [スタート] ボタンをクリックし、[すべてのプログラム]、[Microsoft SQL Server コードネーム 2012]、[構成ツール] の順にポイントして、[SQL Server 構成マネージャー] をクリックします。
  2. サービスの一覧で、[SQL Server のサービス] を右クリックし、[開く] をクリックしす。
  3. [SQL Server 構成マネージャー] スナップインで、FILESTREAM を有効にする ためにSQL Server のインスタンスを探します。画像では、上から3番目のSql Server(MSSQLSERVER)
  4. インスタンスを右クリックし、[プロパティ] をクリックしSql Server(MSSQLSERVER)のプロパティ画面を開きます。
  5. [SQL Server のプロパティ] ダイアログ ボックスで、[FILESTREAM] タブをクリックします。
  6. [Transact-SQL アクセスに対して FILESTREAM を有効にする] チェック ボックスをオンにします。
  7. Windows から FILESTREAM データの読み取りと書き込みを行う場合は、[ファイル I/O ストリーム アクセスに対して FILESTREAM を有効にする] をクリックします。 Windows 共有の名前を [Windows 共有名] ボックスに入力します。
  8. この共有に格納された FILESTREAM データにリモート クライアントからアクセスする必要がある場合は、[リモート クライアントに FILESTREAM データへのストリーム アクセスを許可する] を選択します。
  9. [適用] もしくは[OK] をクリックします。Sql Server(MSSQLSERVER)のプロパティ画面の設定はここまでです。
  10. SQL Server Management Studioを開き、[新しいクエリ] をクリックしてクエリ エディターを表示します。
  11. クエリ エディターで、次の Transact-SQL コードを入力します。
    Transact-SQLEXEC sp_configure filestream_access_level, 2
    RECONFIGURE
  12. [実行] をクリックします。
  13. SQL Server サービスを再開します。

以上で、「インスタンス レベルでの FILESTREAM の有効化」が出来ました。
尚、データベース レベルで以下の設定が必要です。
  ・データベース レベルでの FILESTREAM ファイル グループの指定
  ・データベース レベルでの非トランザクション アクセスの有効化
  ・データベース レベルでの FileTable のディレクトリ指定

[SQL Server] ページとエクステントについて

ページとエクステントについて

SQL Serverの基本についてです。開発備忘録では有りませんがとりあえずメモっておきます。

SQL Server のデータ ストレージの基本単位はページです。
エクステントは、物理的に連続する8ページをまとめたもので、すべてのページは、エクステントに格納されます。

[ページ]
 ページの概要は以下のとおりです。
  ・SQL Server では、ページのサイズは 8 KB です。
  ・ページの先頭には 96 バイトのヘッダーがあり、
   ページ番号、ページの種類、ページ上の空き容量、そのページを所有しているオブジェクトのアロケーション ユニット ID
   が格納されています。
  ・ページの種類は、
    データ・・・・・・・・・・・・すべてのデータが含まれるデータ行。
    インデックス・・・・・・・・インデックスのエントリ。
    テキスト/イメージ・・・LOB (ラージ オブジェクト) データ型、データ行が 8 KB を超える場合の可変長データ列
    の他、各種マップページやページ空き容量ページが有るそうです。
  ・データ行はヘッダーの直後から始まり、ページ上に連続的に配置されます。
  ・ページの末尾から行オフセット テーブルが始まります。
   各行オフセット テーブルにはページ上の 1 行につき 1 つのエントリが格納されます。
   各エントリには、その行の最初のバイトがページの先頭からどれだけ離れているかが記録されます。
   行オフセット テーブル内のエントリは、ページ上の行と逆の順序になっています。
  ・行は複数のページにまたがることができません。
  ・更新操作に基づいてレコードが大きくなると、大きなレコードが別のページに動的に移動されます。
  ・1つのデータ行が 8 KB を超える場合・・・、行の一部をその行のページから移動させます。

 基本的に、1レコードが8Kを超えるような大きなデータを扱わない限り、意識する必要は有りません。
 が、超えてしまう場合、どうなるのか??
  ・SQL Server 2008 の varchar 型、nvarchar 型、varbinary 型、sql_variant 型、または CLR ユーザー定義型
   の列を含むテーブルでは、この制限が緩和されます。
   これらの列の長さは、単独の場合は引き続き 8,000 バイトに制限されますが、組み合わせた場合は 8,060 バイトの
   制限を超えることができます。
  ・組み合わせた長さがこの制限を超えると、データベース エンジンにより、最大幅のレコード列が ROW_OVERFLOW_DATA
   アロケーション ユニット内の別のページに移動されます。
   元のページには、24 バイトのポインタが維持されます。
  ・レコードが短くなる更新操作が発生すると、レコードが IN_ROW_DATA アロケーション ユニット内の元のページに移動する
   ことがあります。
  ・varchar(MAX)は最大格納サイズが2Gです。この場合はエクステントをチェインして格納するそうです。

 大きなレコードある場合の注意
  ・行オーバーフロー データを含む大きなレコードで、クエリを実行したり並べ替えや結合などの他の選択操作を実行すると、
   処理に時間がかかります。これは、これらのレコードが非同期にではなく同期的に処理されるためです。
  ・設計時に行オーバーフロー データの多くの行にクエリが頻繁に実行される可能性が高い場合は、いくつかの列を別の
   テーブルに移動して、テーブルのサイズを正規化することを検討します。
   これにより、非同期結合操作でクエリを行えるようになります。
  ・クラスタ化インデックスのインデックス キーには、ROW_OVERFLOW_DATA アロケーション ユニットに既存のデータを
   持つ varchar 型の列を含めることはできません。クラスタ化インデックスが varchar 型の列に作成され、
   既存のデータが IN_ROW_DATA アロケーション ユニットにある場合に、データを行外に押し出すような挿入処理や
   更新処理をその列に対して行うと失敗します。

[エクステント]
  ・エクステントは、DBMSが領域を管理する際の基本単位です。
  ・1 つのエクステントは物理的に連続した 8 ページ、つまり 64 KB です。
  ・単一エクステントは、単一のオブジェクトに所有され、所有しているオブジェクトだけがエクステント内の 8 ページすべてを
   使用できます。大きなテーブルはエクステントを独占します。
  ・混合エクステントは最大 8 つのオブジェクトによって共有されます。エクステント内の各 8 ページを、それぞれ異なる
   オブジェクトが所有できます。小さなテーブルは、複数で1つのエクステントを共有します。

大きなデータを格納する時はパフォーマンスが悪くなる可能性が有るので、そういう場合は、
  ・正規化をする。
  ・LOBデータをファイルシステムに移動
などで、データをコンパクトにすることが肝要です。

なんとなく、まとめてみました。。。

[ASP.NET] Interop.ActiveDsの読込エラー

エラー対応の開発備忘録です。

[環境]
 windows7(32bit版)でVS2010を使用してWebアプリを開発。
 Windows Server 2003(64bit版)で稼働させる。

[現象]
 デバッグも終わり、サーバへリリースしたところ、下のエラーが発生。
  「ファイルまたはアセンブリ ‘Interop.ActiveDs’、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。」

[対応]
 まず、’Interop.ActiveDs’ってなんだっけ?から
 名前からして、ActiveDirectoryか?
 とりあえず、それらしいものを参照から外そうかと思いましたが、使用しているので。。。無理^^;

 で、ネット検索!
 さっぱりわからないのですが、どうやらWOW64が関係していそう。
 そこで、ターゲットCPUを64bitに変更してみることに。
 1)現在はAnyCPU
 2)▼をクリックして、「構成マネージャー」を表示
 3)Any CPU →x64に・・・・選択肢にない!?
 4)<新規作成..>を選択して作成することに。 設定のコピー元って?。。。
   わからなかったのでとりあえず<空>で
 5)OKをクリックして、Any CPU →x64に
 6)再コンパイル
 7)実行して動作を確認
 8)再度リリース!
 9)無事、動作を確認^^

結果、良くわからないままですが、なんとか動きましたとさ^^

[SQL Server] varcharとchar

varcharとchar

テーブル設計をする時、varchar(nvarchar)かcha(nchar)rか迷う時ありませんか?

私の場合、感覚で決めてしまっているので、良い習慣ではありません。
そこで、少しまとめてみようと思いました。

[格納サイズ]
 charは設定したバイト数がそのまま格納サイズになります。
 varcharは入力されたバイト数+2バイトが格納サイズになります。

 このことから、
  ・列データ エントリが類似したサイズになると想定される場合は、char を使用します。
  ・列データ エントリのサイズがある程度異なると想定される場合は、nvarchar を使用します。

[プログラムから見た取扱のしやすさ]
 プログラミングの理由で、DB設計が影響を受けることは余り好ましくないというのが前提。でも少しだけ。
  SQLで取り扱う場合、データ長を合わせてあると思いますので、問題に成りませんが、
  ・charはデータ長が足らない場合は空白で埋めるため、使用する際に空白が不要な場合はトリムする必要がある。
  ・上と同じ理由から、検索する際も空白で埋めてからDBへ渡す必要がある。
  ・データ長が将来拡張することが微妙に予定されている場合、varcharの方が考慮しなくて済みそう。

  私はvarcharに1票入れます。

[パフォーマンス]
 検索パフォーマンスについては、実際さっぱり判りません^^;
 基本的にはDBがメモリに読み込むデータ長と検索対象のテーブルのレコード長の方がより影響が大きいと考えられます。
 結果、どちらを採用しても最適化する工程が必要ということです。

 更新パフォーマンスについてもほぼ同じ考えです。
 1つの列だけでパフォーマンスは決まらないので、全体で考える必要があると思いますので。
 charの場合、not NULLにしておけば、データ更新時にあふれが発生しませんので少し有利かともおもいます。
 varcharの場合は、更新時にデータがきちきちに詰まっているとあふれが発生します。
 その際は、別のブロックに移動するためパフォーマンスが低下する可能性が高くなります。

 一度に大きなデータを処理するなら、考慮する必要が有るかも知れません。
 しかし、そうなるとやはり全体最適化となるので。。。良く分かりません^^;

結果は、varcharが基本で入力データが固定長の場合のみcharが良いかな。。。と思います。