The most common type of index involves a single column, storing
copies of the values from that column in a data structure,
allowing fast lookups for the rows with the corresponding column
values. The B-tree data structure lets the index quickly find a
specific value, a set of values, or a range of values,
corresponding to operators such as =
,
>
, ≤
,
BETWEEN
, IN
, and so on, in
a WHERE
clause.
The maximum number of indexes per table and the maximum index length is defined per storage engine. See Chapter 13, Storage Engines. All storage engines support at least 16 indexes per table and a total index length of at least 256 bytes. Most storage engines have higher limits.
Prefix Indexes
With
syntax in an index specification, you can create an index that
uses only the first col_name
(N
)N
characters of a
string column. Indexing only a prefix of column values in this
way can make the index file much smaller. When you index a
BLOB
or
TEXT
column, you
must specify a prefix length for the index.
For example:
CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));
Prefixes can be up to 1000 bytes long (767 bytes for
InnoDB
tables).
Prefix limits are measured in bytes, while the prefix length
in CREATE TABLE
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.
FULLTEXT Indexes
You can also create FULLTEXT
indexes. These
are used for full-text searches. Only the
MyISAM
storage engine supports
FULLTEXT
indexes and only for
CHAR
,
VARCHAR
, and
TEXT
columns. Indexing always
takes place over the entire column and column prefix indexing is
not supported. For details, see
Section 11.9, “Full-Text Search Functions”.
Spatial Indexes
You can also create indexes on spatial data types. Currently,
only MyISAM
supports R-tree indexes on
spatial types. Other storage engines use B-trees for indexing
spatial types (except for ARCHIVE
, which does
not support spatial type indexing).
Indexes in the MEMORY Storage Engine
The MEMORY
storage engine uses
HASH
indexes by default, but also supports
BTREE
indexes.