Обсуждение: Learning to rephrase equivalent queries?

Поиск
Список
Период
Сортировка

Learning to rephrase equivalent queries?

От
Jay Levitt
Дата:
Sometimes the planner can't find the most efficient way to execute your
query. Thanks to relational algebra, there may be other, logically
equivalent queries that it DOES know how to optimize.

But I don't know relational algebra.  yet.  (Date/Codd is a sleeping pill.)
I need more experience first.

Are there blogs, guides, rules of thumb, common refactoring patterns out
there somewhere?  I'm looking for a list of basic equalities, the SQL
equivalent of:

a^2 - b^2 = (a + b)(a - b)

Such as:

SELECT  l.*
FROM    t_left l
LEFT JOIN
t_right r
ON      r.value = l.value
WHERE   r.value IS NULL

=

SELECT  l.*
FROM    t_left l
WHERE   NOT EXISTS
(
SELECT  NULL
FROM    t_right r
WHERE   r.value = l.value
)

All my searches for "SQL Refactoring" seem to lead to either (a) discussions
about how many characters an alias should be and how you should indent
things, or (b) tutorials on normalization.  This isn't that.  I want to
learn ways to restate my queries.

Any tips?


Re: Learning to rephrase equivalent queries?

От
Ondrej Ivanič
Дата:
Hi,

On 11 November 2011 00:04, Jay Levitt <jay.levitt@gmail.com> wrote:
> Sometimes the planner can't find the most efficient way to execute your
> query. Thanks to relational algebra, there may be other, logically
> equivalent queries that it DOES know how to optimize.
>
> But I don't know relational algebra.  yet.  (Date/Codd is a sleeping pill.)
> I need more experience first.
>
> Are there blogs, guides, rules of thumb, common refactoring patterns out
> there somewhere?  I'm looking for a list of basic equalities, the SQL
> equivalent of:

Have a look here: http://en.wikipedia.org/wiki/Relational_algebra
plus "External links" section

--
Ondrej Ivanic
(ondrej.ivanic@gmail.com)