Sql Oracle中的索引工作

Sql Oracle中的索引工作,sql,oracle,indexing,Sql,Oracle,Indexing,我的select查询将围绕urlHash和modDate展开。如果我在这些列上创建索引 String s1 = "create table " +tableName+ "(id number NOT NULL PRIMARY KEY, " + "url varchar(1000) NOT NULL, " + "urlHash varchar(255) NOT NULL, " + "contentHash varchar(255),

我的select查询将围绕urlHash和modDate展开。如果我在这些列上创建索引

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);
然后,如果我基于这两列或单列启动select查询,那么在后台会发生什么。谁能解释一下,因为我是oracle数据库世界的新手。在这种情况下,什么样的指数通常是最好的。我们应该在什么基础上使用它

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

带有
like
运算符的前导通配符将使oracle忽略
urlHash
上的索引

为了获得更好的性能,您可以执行以下任一操作:

  • 将索引提示与select一起使用

    Select * from tabelName where urlHash like '%asdreefjhsawofjkwjfkwqdskdjksdwq%';
    
  • urlHash
    列上使用全文索引上下文

  • select /*+index(tableName,hash_date_idx)*/ * from tabelName ...