Re: KEY vs. INDEX

2007-06-19 Thread Baron Schwartz

Hi,

David T. Ashley wrote:

In reading the syntax of the CREATE TABLE statement, I'm a little confused
by the two keywords KEY and INDEX.

What does one use when one wants MySQL to arrange the column so that it can
find a given record WHERE column=whatever in approximately O(log N) time?

This is a key, right?  MySQL uses some kind of a BTREE arrangement, 
right?


Yes.  Most indexes are B+ trees.  KEY and INDEX are synonyms in general.  There may be 
places where it matters but I can't think of any.  In any case it's just syntax, not 
functionality.


Some storage engines offer other kinds of indexes: MyISAM offers fulltext and spatial, 
MEMORY allows hash indexes.


Baron

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:http://lists.mysql.com/[EMAIL PROTECTED]



Re: KEY and index

2001-06-23 Thread Benjamin Pflugmann

Hello.

On Sat, Jun 23, 2001 at 01:01:41AM +0020, [EMAIL PROTECTED] wrote:
 I understand that indexes work so fast because they are usually smaller than the 
 original table, since they contain on average just 1 column, or at least less 
 information than the complete table. But how about a table with just 2 columns. 
 Would an index based on the same 2 columns speed up processing, more specific, 
 would it speed up a SELECT WHERE (the WHERE clause being related to the index 
 algoritm)

Yes.

The reason is, that in the table itself, the records are stored in no
particular order. So, to find a row, MySQL would have to scan the
whole table.

An index, with MyISAM tables, stored as a tree, implicitly has an
order of all values of the column(s) in question and has an additional
pointer to the data file, to indicate where the belonging record is
saved.

There are a number of methods for searching within sorted sets, but as
a simplification, have a look at binary search
(http://whatis.techtarget.com/definition/0,289893,sid9_gci349425,00.html).

It needs log_2(N) steps to find the locating an item, i.e. for
1,000,000,000 it needs only about 30 steps (power(2,30)=1073741824).
That means, only 30 disk reads instead of 1,000,000,000. And MySQL
even does better.

That's the main reason why an index works fast.

Bye,

Benjamin.


-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




Re: KEY and index

2001-06-23 Thread Daniel Åkerud


An index is not just putting the data in a separate file. It's about storing
information in more high-tech data structures like B-trees, R-trees and
hashes. MySQL only support B-Trees, which is the most commonly used. B-Trees
are about storing data in a tree-like structure for very fast retrieval on
slow media, like hard disks. The penalty is a bit slower insertion of data.
But the results are extremely good when searching.

In MySQL having a table that looks like this:

idint primary key
namechar(200)

and making an index on name, will get you a 0.1 * original_retrieval_time
when searching, but 1.5*original_insertion_time when inserting. It roughly
means that (on my system that is) you should do at least one select
statement for every 4000 inset statements, for the index to be profitable.
So, keep in mind that an index wont allways suit you, but mostly.

Daniel Åkerud.

 Quoting Cal Evans [EMAIL PROTECTED]:
  Regular keys are just indexes, not necessarily unique, not necessarily
on
  fields that don't accept nulls. Their primary function is to speed up
data
  retrieval.  Use them sparingly as they can have a negative impact on
  inserting and updating records.

 I understand that indexes work so fast because they are usually smaller
than the
 original table, since they contain on average just 1 column, or at least
less
 information than the complete table. But how about a table with just 2
columns.
 Would an index based on the same 2 columns speed up processing, more
specific,
 would it speed up a SELECT WHERE (the WHERE clause being related to the
index
 algoritm)

 Thanks, Marco

  - Original Message -
  From: Marco Bleeker [EMAIL PROTECTED]
  To: [EMAIL PROTECTED]
  Sent: Friday, June 22, 2001 9:36 AM
  Subject: KEY and index
 
 
   Hello, I am learning MySQL and have a question. I know about the
  importance
   of the PRIMARY KEY statement, but I also see a KEY statement being
used
   when creating a table. Is this just short for PRIMARY KEY, or what's
the
   difference?
  
   Second question, when I have a large table, but with only 2 small
cells
  per
   row (2 columns), is it useful to create a PRIMARY KEY, KEY, or INDEX
for
   speed (there is no set relation to another table).
  
   Third question, when exactly does MySQL use indexes. Is it used when
the
   indexed column is part of a (SELECT *) WHERE statement, together with
a
   non-indexed column? I just want to check if matching a row is present
or
   not, not actually retrieve information (WHERE ip='$ip' and
  datecurdate())
  
   Thanks, Marco
   |
   | Marco Bleeker, Amsterdam
   | [EMAIL PROTECTED]
   | http://www.euronet.nl/users/mbleeker/
   |
   | Attachments only after prior notice please.
   | Don't put me on any kind of mailing list.
   |
   | I am now receiving the Snowhite virus 4x a day
   | - some of you must be infected, please check !
   | (No, you did not get it from me, I use Eudora)
   | __@
   |   _`\,_
   |__(*)/ (*)Ah, op DIE fiets !


 -
 Before posting, please check:
http://www.mysql.com/manual.php   (the manual)
http://lists.mysql.com/   (the list archive)

 To request this thread, e-mail [EMAIL PROTECTED]
 To unsubscribe, e-mail [EMAIL PROTECTED]
 Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




Re: KEY and index

2001-06-23 Thread Eric Persson

Daniel Åkerud wrote:
 In MySQL having a table that looks like this:
 
 idint primary key
 namechar(200)
 
 and making an index on name, will get you a 0.1 * original_retrieval_time
 when searching, but 1.5*original_insertion_time when inserting. It roughly
 means that (on my system that is) you should do at least one select
 statement for every 4000 inset statements, for the index to be profitable.
 So, keep in mind that an index wont allways suit you, but mostly.

Where did you get this numbers from, are they some general factors or do
they depend
on the table design?

//Eric

-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




Re: KEY and index

2001-06-23 Thread Daniel Åkerud


They most certainly do depend on the table design and especially on the
system which runs the test.
They are my own figures...

 Daniel Åkerud wrote:
  In MySQL having a table that looks like this:
 
  idint primary key
  namechar(200)
 
  and making an index on name, will get you a 0.1 *
original_retrieval_time
  when searching, but 1.5*original_insertion_time when inserting. It
roughly
  means that (on my system that is) you should do at least one select
  statement for every 4000 inset statements, for the index to be
profitable.
  So, keep in mind that an index wont allways suit you, but mostly.

 Where did you get this numbers from, are they some general factors or do
 they depend
 on the table design?

 //Eric



-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




Re: KEY and index

2001-06-22 Thread Cal Evans

KEY is used to build other indexes.  It's not short for Primary Key.  There
are PRIMARY KEY indexes, candidate key indexes (these COULD be a primary key
but for one reason or another , are not) and just regular indexes.

All tables should have a primary key. (I'm partial to adding an
auto_increment field to almost every table of the name tableNameID and
making this my primary key) Some tables will also have a candidate key. This
is especially true if you manufacture a PK like I do. Then there may be a
piece of data that is unique to each record and never null that would
normally serve as a primary key. (The reason I manufacture PKs is because if
a piece of data means something then it is always possible that it will
change.This means that you would have to trace down all your FK
relationships and change the data in those tables as well.SSN, phone number,
email address are all examples of candidate keys but also smart keys. I
never use them as PKs. )

Regular keys are just indexes, not necessarily unique, not necessarily on
fields that don't accept nulls. Their primary function is to speed up data
retrieval.  Use them sparingly as they can have a negative impact on
inserting and updating records.

HTH,
Cal
*
* Cal Evans
* Senior Internet Dreamer
* http://www.calevans.com
*
- Original Message -
From: Marco Bleeker [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
Sent: Friday, June 22, 2001 9:36 AM
Subject: KEY and index


 Hello, I am learning MySQL and have a question. I know about the
importance
 of the PRIMARY KEY statement, but I also see a KEY statement being used
 when creating a table. Is this just short for PRIMARY KEY, or what's the
 difference?

 Second question, when I have a large table, but with only 2 small cells
per
 row (2 columns), is it useful to create a PRIMARY KEY, KEY, or INDEX for
 speed (there is no set relation to another table).

 Third question, when exactly does MySQL use indexes. Is it used when the
 indexed column is part of a (SELECT *) WHERE statement, together with a
 non-indexed column? I just want to check if matching a row is present or
 not, not actually retrieve information (WHERE ip='$ip' and
datecurdate())

 Thanks, Marco
 |
 | Marco Bleeker, Amsterdam
 | [EMAIL PROTECTED]
 | http://www.euronet.nl/users/mbleeker/
 |
 | Attachments only after prior notice please.
 | Don't put me on any kind of mailing list.
 |
 | I am now receiving the Snowhite virus 4x a day
 | - some of you must be infected, please check !
 | (No, you did not get it from me, I use Eudora)
 | __@
 |   _`\,_
 |__(*)/ (*)Ah, op DIE fiets !



 -
 Before posting, please check:
http://www.mysql.com/manual.php   (the manual)
http://lists.mysql.com/   (the list archive)

 To request this thread, e-mail [EMAIL PROTECTED]
 To unsubscribe, e-mail
[EMAIL PROTECTED]
 Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




Re: KEY and index

2001-06-22 Thread Daniel Åkerud

The manual also states that INDEX is a synonym for KEY, which means that
they have identical funcationality.

Daniel Åkerud

- Original Message -
From: Cal Evans [EMAIL PROTECTED]
To: [EMAIL PROTECTED]; Marco Bleeker [EMAIL PROTECTED]
Sent: Friday, June 22, 2001 6:27 PM
Subject: Re: KEY and index


 KEY is used to build other indexes.  It's not short for Primary Key.
There
 are PRIMARY KEY indexes, candidate key indexes (these COULD be a primary
key
 but for one reason or another , are not) and just regular indexes.

 All tables should have a primary key. (I'm partial to adding an
 auto_increment field to almost every table of the name tableNameID and
 making this my primary key) Some tables will also have a candidate key.
This
 is especially true if you manufacture a PK like I do. Then there may be a
 piece of data that is unique to each record and never null that would
 normally serve as a primary key. (The reason I manufacture PKs is because
if
 a piece of data means something then it is always possible that it will
 change.This means that you would have to trace down all your FK
 relationships and change the data in those tables as well.SSN, phone
number,
 email address are all examples of candidate keys but also smart keys. I
 never use them as PKs. )

 Regular keys are just indexes, not necessarily unique, not necessarily on
 fields that don't accept nulls. Their primary function is to speed up data
 retrieval.  Use them sparingly as they can have a negative impact on
 inserting and updating records.

 HTH,
 Cal
 *
 * Cal Evans
 * Senior Internet Dreamer
 * http://www.calevans.com
 *
 - Original Message -
 From: Marco Bleeker [EMAIL PROTECTED]
 To: [EMAIL PROTECTED]
 Sent: Friday, June 22, 2001 9:36 AM
 Subject: KEY and index


  Hello, I am learning MySQL and have a question. I know about the
 importance
  of the PRIMARY KEY statement, but I also see a KEY statement being used
  when creating a table. Is this just short for PRIMARY KEY, or what's the
  difference?
 
  Second question, when I have a large table, but with only 2 small cells
 per
  row (2 columns), is it useful to create a PRIMARY KEY, KEY, or INDEX for
  speed (there is no set relation to another table).
 
  Third question, when exactly does MySQL use indexes. Is it used when the
  indexed column is part of a (SELECT *) WHERE statement, together with a
  non-indexed column? I just want to check if matching a row is present or
  not, not actually retrieve information (WHERE ip='$ip' and
 datecurdate())
 
  Thanks, Marco
  |
  | Marco Bleeker, Amsterdam
  | [EMAIL PROTECTED]
  | http://www.euronet.nl/users/mbleeker/
  |
  | Attachments only after prior notice please.
  | Don't put me on any kind of mailing list.
  |
  | I am now receiving the Snowhite virus 4x a day
  | - some of you must be infected, please check !
  | (No, you did not get it from me, I use Eudora)
  | __@
  |   _`\,_
  |__(*)/ (*)Ah, op DIE fiets !
 
 
 
  -
  Before posting, please check:
 http://www.mysql.com/manual.php   (the manual)
 http://lists.mysql.com/   (the list archive)
 
  To request this thread, e-mail [EMAIL PROTECTED]
  To unsubscribe, e-mail
 [EMAIL PROTECTED]
  Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php
 
 


 -
 Before posting, please check:
http://www.mysql.com/manual.php   (the manual)
http://lists.mysql.com/   (the list archive)

 To request this thread, e-mail [EMAIL PROTECTED]
 To unsubscribe, e-mail [EMAIL PROTECTED]
 Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php