Oracle 中的索引工作

发布于 2024-12-12 06:28:38 字数 1426 浏览 0 评论 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 展开。因此,如果我在这些列上创建索引。

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

然后,如果我基于这两列或单列触发选择查询,那么后台会发生什么。谁能解释一下,因为我是 Oracle 数据库世界的新手。而在这种情况下一般什么样的索引是最好的。我们应该在什么基础上使用它。

Select * from tabelName where urlHash like '%asdreefjhsawofjkwjfkwqdskdjksdwq%';
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);

And my select query will revolve around urlHash and modDate. So if I create an index on these columns.

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

And then if I fire select query based on these two columns or single column then what will happen in background. Can anyone explain that as I am new to oracle database world. And what kind of index is generally the best in this case. And on what basis we should use one.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

尴尬癌患者 2024-12-19 06:28:38

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

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

  1. 使用带有 select 的索引提示

    select /*+index(tableName,hash_date_idx)*/ * from tabelName ...
    
  2. urlHash 列上使用全文索引 CONTEXT。

A leading wildcard with the like operator will make oracle to ignore the index on urlHash.

You can do either of the follwing for better performance:

  1. use index hints with select

    select /*+index(tableName,hash_date_idx)*/ * from tabelName ...
    
  2. use full text indexing CONTEXT on urlHash column.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文