Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 136225
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 11, 20262026-05-11T06:54:53+00:00 2026-05-11T06:54:53+00:00

I have a table with about 2,000,000 rows. I need to query one of

  • 0

I have a table with about 2,000,000 rows. I need to query one of the columns to retrieve the rows where a string exsists as part of the value.

When I run the query I will know the position of the string, but not before hand. So a view which takes a substring is not an option.

As far as I can see I have three options

  1. using like ‘% %’
  2. using instr
  3. using substr

I do have the option of creating a function based index, if I am nice to the dba.

At the moment all queries are taking about two seconds. Does anyone have experience of which of these options will work best, or if there is another option? The select will be used for deletes every few seconds, it will typically select 10 rows.

edit with some more info

The problem comes about as we are using a table for storing objects with arbitrary keys and values. The objects come from outside our system so we have limited scope to control them so the text column is something like ‘key1=abc,key2=def,keyn=ghi’ I know this is horribly denormalised but as we don’t know what the keys will be (to some extent) it is a reliable way to store and retrieve values. To retrieve a row is fairly fast as we are searching the whole of the column, which is indexed. But the performance is not good if we want to retrieve the rows with key2=def.

We may be able to create a table with columns for the most common keys, but I was wondering if there was a way to improve performance with the existing set up.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. 2026-05-11T06:54:54+00:00Added an answer on May 11, 2026 at 6:54 am

    In Oracle 10:

    CREATE TABLE test (tst_test VARCHAR2(200));  CREATE INDEX ix_re_1 ON test(REGEXP_REPLACE(REGEXP_SUBSTR(tst_test, 'KEY1=[^,]*'), 'KEY1=([^,]*)', '\1'))  SELECT  * FROM    TEST WHERE   REGEXP_REPLACE(REGEXP_SUBSTR(TST_TEST, 'KEY1=[^,]*'), 'KEY1=([^,]*)', '\1') = 'TEST' 

    This will use newly selected index.

    You will need as many indices as there are KEYs in you data.

    Presence of an INDEX, of course, impacts performance, but it depends very little on REGEXP being there:

    SQL> CREATE INDEX ix_test ON test (tst_test)   2  / Index created Executed in 0,016 seconds  SQL> INSERT   2  INTO   test (tst_test)   3  SELECT 'KEY1=' || level || ';KEY2=' || (level + 10000)   4  FROM   dual   5  CONNECT BY   6     LEVEL <= 1000000   7  / 1000000 rows inserted Executed in 47,781 seconds  SQL> TRUNCATE TABLE test   2  / Table truncated Executed in 2,546 seconds  SQL> DROP INDEX ix_test   2  / Index dropped Executed in 0 seconds  SQL> CREATE INDEX ix_re_1 ON test(REGEXP_REPLACE(REGEXP_SUBSTR(tst_test, 'KEY1=[^,]*'), 'KEY1=([^,]*)', '\1'))   2  / Index created Executed in 0,015 seconds   SQL> INSERT       2  INTO   test (tst_test)       3  SELECT 'KEY1=' || level || ';KEY2=' || (level + 10000)       4  FROM   dual       5  CONNECT BY       6     LEVEL <= 1000000       7  / 1000000 rows inserted Executed in 53,375 seconds 

    As you can see, on my not very fast machine (Core2 4300, 1 Gb RAM) you can insert 20000 records per second to an indexed field, and this rate almost does not depend on type of INDEX being used: plain or function based.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a table with about 5,000 rows which I build dynamically with jQyuery.
I have a MySQL table with about 5,000,000 rows that are being constantly updated
I have a mysql DB table of about 10.000 rows and about 20 fields.
I have a table with about 100.000 rows that used to look more or
I have about 10 tables with ~10,000 rows each which need to be pulled
Morning folks, I have a temporary table with 135,000 rows and 24 columns, of
We have a table with about 770,000 rows, in which only a few hundred
Guys I'm stumped on this one, I have a large table with 100,000 rows
I have a sqlite database with only one table (around 50,000 rows) and I
I have an InnoDB table of about 500 000 rows which is growing and

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.