Jörg

Thanks for the useful reply.  Maybe I can EXPLAIN my select queries for you
to advise if any changes need to be made ?

Regards
Neil

On Mon, Oct 4, 2010 at 3:38 PM, Joerg Bruehe <joerg.bru...@oracle.com>wrote:

> Hi!
>
>
> Neil Tompkins wrote:
> > Thanks for your reply. So should we create individual indexes on each
> > field or a multiple column index ??
>
> This question cannot be answered without checking and measuring your
> installation. The decision whether to create an index is always an act
> of balancing:
>
> - If there is an index, the database server can use it to find data
>  records by looking up the index, not scanning the base data.
>  This results in load reduction (both CPU and disk IO) and speeds up
>  query execution.
>
> - If there is an index, the database server must maintain it whenever
>  data are altered (insert/update/delete), in addition to the base data.
>  This is increased load (both CPU and disk IO) and slows down data
>  changes.
>
> So obviously you want to create only those indexes that are helpful for
> query execution: you will never (voluntarily) create an index on a
> column which isn't used in search conditions, or whose use is already
> provided by other indexes.
> Of the remaining candidate indexes, you will never (voluntarily) create
> one that provides less gain in searches than it costs in data changes.
>
> With MySQL, AFAIK there is the limitation that on one table only one
> index can be used. As a result, the choice of indexes to create depends
> on the searches executed by your commands, their relative frequency, and
> the frequency of data changes.
>
>
> To answer your other question: If you run aggregate functions (like
> SUM(), MIN(), or MAX()) on all records of a table, their results could
> be computed by accessing a matching index only. I don't know whether
> MySQL does this, I propose you check that yourself using EXPLAIN.
>
> If you run them on subsets of a table only, an index on that column will
> not help in general.
>
> In database implementations, there is the concept of a "covering index":
> If you have an index on columns A and B of some table, its contents
> (without the base data) would suffice to answer
>   SELECT SUM(B) WHERE A = x
> Again, I don't know whether MySQL does this, and I refer you to EXPLAIN.
>
>
> HTH,
> Jörg
>
> --
> Joerg Bruehe,  MySQL Build Team,  joerg.bru...@oracle.com
> ORACLE Deutschland B.V. & Co. KG,   Komturstrasse 18a,   D-12099 Berlin
> Geschaeftsfuehrer: Juergen Kunz, Marcel v.d. Molen, Alexander v.d. Ven
> Amtsgericht Muenchen: HRA 95603
>
>

Reply via email to