2011-10-27 9 views
0
String s1 = "create table " +tableName+ 
     "(id number NOT NULL PRIMARY KEY, " + 
     "url varchar(1000) NOT NULL, " + 
     "urlHash varchar(255) NOT NULL, " + 
     "contentHash varchar(255), " + 
     "modDate varchar(30), " + 
     "contentLocation varchar(100), " + 
     "status integer, " + 
     "lastCrawlDate varchar(30)) "; 

    String s3 = "create sequence " +sequenceName+ " start with 1 increment by 1 nomaxvalue"; 

     stmt=conn.createStatement(); 
     stmt.executeUpdate(s1); 
     stmt.executeUpdate(s3); 

    ps = conn.prepareStatement (
       "INSERT INTO testing (id, url, urlHash, contentHash, modDate, contentLocation, status, lastCrawlDate) VALUES(test_seq.nextval,?,?,?,?,?,?,?)"); 


       ps.setString (1, url); 
       ps.setString (2, urlHash); 
       ps.setString (3, contentHash); 
       ps.setString (4, modDate); 
       ps.setString (5, contentLocation); 
       ps.setLong (6, status); 
       ps.setString (7, lastCrawlDate); 

そして私の選択クエリはurlHashとmodDateの周りを回ります。だから私はこれらの列にインデックスを作成する場合。インデックスはOracleで働いています

CREATE INDEX hash_date_idx ON tableName (urlHash asc, modDate asc); 

そして、これらの2つの列または1つの列に基づいて選択クエリを実行すると、バックグラウンドで何が起こるでしょう。誰かが私がOracleデータベースの世界で初めてのことを説明することはできますか?この場合、一般にどのようなインデックスが最適ですか。そして、どのような基準で、私たちは一つを使うべきです。

Select * from tabelName where urlHash like '%asdreefjhsawofjkwjfkwqdskdjksdwq%'; 

答えて

2

likeオペレータとの主要なワイルドカードは、OracleがurlHashにインデックスを無視するようになります。あなたは、パフォーマンスを向上させるためfollwingのいずれかを行うことができます

:選択

select /*+index(tableName,hash_date_idx)*/ * from tabelName ... 
    1. 使用のインデックスヒントurlHash列にフルテキストインデックスのCONTEXTを使用しています。

  • 関連する問題