2011年1月10日月曜日

【MySQLのとUNIQUEとインデックス】lcc-hikaku.jp公開後-15

【UNIQUE】

lcc-hikaku.jpのRSS取得データについて、重複するものがあるので、今後は重複データを取得しない使用にしたい。
そこで、MySQLにそのような機能はないものかと探していたらUNIQUEという機能があることがわかった。
という訳で下記を実行


まず既にテーブルにユニークでない値があるの場合があるのでデータを一旦削除する。
削除しない場合は、被っているものを抽出し、削除するSQLを書く。

削除方法はphpmyadminで
「空にする」
を実行する。

TRUNCATE TABLE table_name
でもおk。
truncateについては
参照。つまりレコードを一つ一つ削除するのではなく、テーブルを一括で削除し、また再構築するので早いのだとか。
uniqueのインデックスはtext型には使えないので、これもphpmyadminを使用してvarchar(256)に変更
※この時varcharの数値varchar(256)のように指定しないとエラーが出るので注意。

さらにこれもphpmyadminでuniqueのインデックスを設定。
SQLでは
ALTER TABLE `lcchikaku_news` ADD UNIQUE (
`url`
)でできる。

※UNIQUEを使わない方法としては、
一度selectして、値がなければinsertっていう文のが良いかと。その際にはインデックスを使用して、探索速度を速くする。
という方法が考えられる。

調べているなかでFULLTEXT インデックス
というのが出てきた。
http://dev.mysql.com/doc/refman/4.1/ja/create-index.html
またちゃんと理解したらエントリーする。

↓がとても詳しい
http://www.daito.ac.jp/~ikeuchi/webdb/mysql_5.html


★追記

$sql = "insert ignore into lcchikaku_news (title, summary, url, regtime) value ( '$title', '$summary', '$url', '$regtime')";

http://www.res-system.com/weblog/item/620

ignoreを追記しないと、重複をinsertしようとするときに止まってしまうとのこと。
よって、ignoreを追記して、その際には処理を無視し、挿入されないようにすることができる。


【インデックス】
卒業研究で、データをたくさん扱うのだが、その際にいちいちデータすべてを検索したりしていては非常に多くの時間がかかって困っていた。そこで、インデックスという機能を使うことにする。
多少前後するが、インデックスについて学ぶ。

まずは
に詳しく解説してある。

・・・シーケンスってなんだっけ?というわけで

なるほどねー。そりゃインデックス使った方が早いよね。人間も目次使うもの。

index
【名】
  1. 〔本の〕索引、インデックス◆通例、巻末に付けられる、本文中の重要な語とその記載ページ数をリストにしたもの。
(アルクより)

インデックスの導入方法をメモ。
解説を詳しく見て、下記を実装。

alter table テーブル名 add index インデックス名 (フィールド名);
で、インデックスを作成できる模様。
現在卒論で使っているデータをDBにぶちこんでこれを使って効率よくデータをとろうと思う。
作業ログとしてまとめて今度あげます。

以上。さっさと卒論書かないと大変なことになるかも・・・^^;



0 件のコメント:

コメントを投稿