- August 12–22: Online Training (EU shift)
- Enrollment
- FOSDEM Impressions
- June 8–18: Online Training (US shift)
- November 11-12 in Frankfurt am Main
- Online-Training in July and August
- Oracle + PostgreSQL
- Party time
- PostgreSQL Performance Event
- SQL Server Performance Kurs in Stuttgart
- SQL Server performance training in London
- Shipping Terms
- The two top performance problems caused by ORM tools
- Top Tweets January 2013
- Training Survey
- Use The Index, Luke
- Ask
- Consulting
2012-04-18Math
There is one more class of obfuscations that is smart and prevents proper index usage. Instead of using logic expressions it is using a calculation.
Consider the following statement. Can it use an index on NUMERIC_NUMBER?
SELECT numeric_number
FROM table_name
WHERE numeric_number - 1000 > ?
Similarly, can the following statement use an index on A and B—you choose the order?
SELECT a, b
FROM table_name
WHERE 3*a + 5 = b
Let’s put these questions into a different perspective; if you were developing an SQL database, would you add an equation solver? Most database vendors just say “No!” and thus, neither of the two examples uses the index.
London, 10/11 June 2013: 2 days SQL performance training with Markus Winand. Register now.
You can even use math to obfuscate a condition intentionally—as we did it previously for the full text LIKE search. It is enough to add zero, for example:
SELECT numeric_number
FROM table_name
WHERE numeric_number + 0 = ?
Nevertheless we can index these expressions with a function-based index if we use calculations in a smart way and transform the where clause like an equation:
SELECT a, b
FROM table_name
WHERE 3*a - b = -5
We just moved the table references to the one side and the constants to the other. We can then create a function-based index for the left hand side of the equation:
CREATE INDEX math ON table_name (3*a - b)
Stay connected:
RSS Feed
Like on Facebook
Follow me on Twitter
Share at Google+
RSS FeedFlattr this! Follow me on TwitterShare at Google+Like on Facebook