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

  • Home
  • SEARCH
  • 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 of about a million rows and I need to update
I have a fairly simple sync problem. I have a table with about 10
I have a table that has about 1/2 million records in it. Each month
I have a table that holds information about cities in a game, you can
Say I have at database table containing information about a news article in each
I have been reading about the differences between Table Variables and Temp Tables and
I have a basic property bag table that stores attributes about my primary table
I have table inside a div tab. The table has 40 rows in it
I have a question about tables in MySQL. I'm currently making a website where
I have a MSSQL2005 DB with about 140 tables. I want to create either

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.