#sql #oracle #indexing
#sql #Oracle #индексирование
Вопрос:
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);
И затем, если я запущу запрос select на основе этих двух столбцов или одного столбца, то что будет происходить в фоновом режиме. Может кто-нибудь объяснить это, поскольку я новичок в мире баз данных oracle. И какой индекс, как правило, является лучшим в этом случае. И на каком основании мы должны его использовать.
Select * from tabelName where urlHash like '%asdreefjhsawofjkwjfkwqdskdjksdwq%';
Ответ №1:
Ведущий подстановочный знак с like
оператором заставит oracle игнорировать индекс urlHash
.
Вы можете выполнить любое из следующих действий для повышения производительности:
- используйте подсказки по индексу с помощью select
select /* index(tableName,hash_date_idx)*/ * from tabelName ...
- используйте КОНТЕКСТ полнотекстовой индексации для
urlHash
столбца.