DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(mysql.info.gz) CREATE INDEX

Info Catalog (mysql.info.gz) CREATE DATABASE (mysql.info.gz) Data Definition (mysql.info.gz) CREATE TABLE
 
 13.2.5 `CREATE INDEX' Syntax
 ----------------------------
 
      CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX INDEX_NAME
          [USING INDEX_TYPE]
          ON TBL_NAME (INDEX_COL_NAME,...)
 
      INDEX_COL_NAME:
          COL_NAME [(LENGTH)] [ASC | DESC]
 
 In MySQL 3.22 or later, `CREATE INDEX' is mapped to an `ALTER TABLE'
 statement to create indexes.   `ALTER TABLE' ALTER TABLE.  The
 `CREATE INDEX' statement doesn't do anything prior to MySQL 3.22.
 
 Normally, you create all indexes on a table at the time the table itself
 is created with `CREATE TABLE'.   `CREATE TABLE' CREATE TABLE.
 `CREATE INDEX' allows you to add indexes to existing tables.
 
 A column list of the form `(col1,col2,...)' creates a multiple-column
 index.  Index values are formed by concatenating the values of the given
 columns.
 
 For `CHAR' and `VARCHAR' columns, indexes can be created that use only
 part of a column, using `COL_NAME(LENGTH)' syntax to index a prefix
 consisting of the first LENGTH characters of each column value. `BLOB'
 and `TEXT' columns also can be indexed, but a prefix length _must_ be
 given.
 
 The statement shown here creates an index using the first 10 characters
 of the `name' column:
 
      CREATE INDEX part_of_name ON customer (name(10));
 
 Because most names usually differ in the first 10 characters, this
 index should not be much slower than an index created from the entire
 `name' column.  Also, using partial columns for indexes can make the
 index file much smaller, which could save a lot of disk space and might
 also speed up `INSERT' operations!
 
 Prefixes can be up to 255 bytes long (or 1000 bytes for `MyISAM' and
 `InnoDB' tables as of MySQL 4.1.2).  Note that prefix limits are
 measured in bytes, whereas the prefix length in `CREATE INDEX'
 statements is interpreted as number of characters.  Take this into
 account when specifying a prefix length for a column that uses a
 multi-byte character set.
 
 You can add an index on a column that can have `NULL' values only if
 you are using MySQL 3.23.2 or newer and are using the `MyISAM',
 `InnoDB', or `BDB' table type.  You can only add an index on a `BLOB'
 or `TEXT' column if you are using MySQL 3.23.2 or newer and are using
 the `MyISAM' or `BDB' table type, or MySQL 4.0.14 or newer and the
 `InnoDB' table type.
 
 An INDEX_COL_NAME specification can end with `ASC' or `DESC'.  These
 keywords are allowed for future extensions for specifying ascending or
 descending index value storage.  Currently they are parsed but ignored;
 index values are always stored in ascending order.
 
 From MySQL 4.1.0 on, some storage engines allow you to specify an index
 type when creating an index.  The syntax for the INDEX_TYPE specifier
 is `USING type_name'. The allowable `type_name' values supported by
 different storage engines are shown in the following table. Where
 multiple index types are listed, the first one is the default when no
 INDEX_TYPE specifier is given.
 
 *Storage       *Allowable Index Types*
 Engine*        
 `MyISAM'       `BTREE'
 `InnoDB'       `BTREE'
 `MEMORY/HEAP'  `HASH', `BTREE'
 
 Example:
 
      CREATE TABLE lookup (id INT) ENGINE = MEMORY;
      CREATE INDEX id_index USING BTREE ON lookup (id);
 
 `TYPE type_name' can be used as a synonym for `USING type_name' to
 specify an index type.  However, `USING' is the preferred form.  Also,
 the index name that precedes the index type in the index specification
 syntax is not optional with `TYPE'. This is because, unlike `USING',
 `TYPE' is not a reserved word and thus is interpreted as an index name.
 
 If you specify an index type that is not legal for a storage engine,
 but there is another index type available that the engine can use
 without affecting query results, the engine will use the available type.
 
 For more information about how MySQL uses indexes, see  MySQL
 indexes.
 
 `FULLTEXT' indexes can index only `CHAR', `VARCHAR', and `TEXT'
 columns, and only in `MyISAM' tables. `FULLTEXT' indexes are available
 in MySQL 3.23.23 or later.   Fulltext Search.
 
 `SPATIAL' indexes can index only spatial columns, and only in `MyISAM'
 tables. `SPATIAL' indexes are available in MySQL 4.1 or later. Spatial
 column types are described in  Spatial extensions in MySQL.
 
Info Catalog (mysql.info.gz) CREATE DATABASE (mysql.info.gz) Data Definition (mysql.info.gz) CREATE TABLE
automatically generated byinfo2html