普通索引
其 sql 格式是 CREATE INDEX IndexName ON TableName(字段名(length)) 或者 ALTER TABLE TableName ADD INDEX IndexName(字段名(length))
第一种方式:CREATE INDEX account_Index ON award(account);
第二种方式:ALTER TABLE award ADD INDEX account_Index(account)
如果是 CHAR,VARCHAR 类型,length 可以小于字段的实际长度,如果是 BLOB 和 TEXT 类型就必须指定长度;
唯一索引
与普通索引类似,但是不同的是唯一索引要求所有的类的值是唯一的,这一点和主键索引一样,但是他允许有空值。
其 sql 格式是 CREATE UNIQUE INDEX IndexName ON TableName(字段名(length)); 或者 ALTER TABLE TableName ADD UNIQUE (column_list) CREATE UNIQUE INDEX account_UNIQUE_Index ON award(account);
主键索引
不允许有空值,(在 B+TREE 中的 InnoDB 引擎中,主键索引起到了至关重要的地位)
主键索引建立的规则是 int 优于 varchar,一般在建表的时候创建,最好是与表的其他字段不相关的列或者是业务不相关的列。
一般会设为 int 而且是 AUTO_INCREMENT 自增类型的
一个表中含有多个单列索引不代表是组合索引,通俗一点讲 组合索引是:包含多个字段但是只有索引名称
其 sql 格式是 CREATE INDEX IndexName On TableName(字段名(length),字段名(length),…);
CREATE INDEX nickname_account_createdTime_Index ON award(nickname, account, created_time);
如果你建立了 组合索引(nickname_account_createdTime_Index)
那么他实际包含的是 3 个索引 (nickname) (nickname,account)(nickname,account,created_time)
文本字段上 (text) 如果建立的是普通索引,那么只有对文本的字段内容前面的字符进行索引,其字符大小根据索引建立索引时申明的大小来规定。
如果文本中出现多个一样的字符,而且需要查找的话,那么其条件只能是 where column lick ‘%xxxx%’ 这样做会让索引失效这个时候全文索引就祈祷了作用了
ALTER TABLE tablename ADD FULLTEXT(column1, column2)
有了全文索引,就可以用 SELECT 查询命令去检索那些包含着一个或多个给定单词的数据记录了。
SELECT * FROM tablename WHERE MATCH(column1, column2) AGAINST(‘xxx′, ‘sss′, ‘ddd′)
这条命令将把 column1 和 column2 字段里有 xxx、sss 和 ddd 的数据记录全部查询出来。
在建立索引的时候应该考虑索引应该建立在数据库表中的某些列上面 哪一些索引需要建立,哪一些所以是多余的.
一般来说
在经常需要搜索的列上,可以加快索引的速度。
主键列上可以确保列的唯一性。
在表与表的而连接条件上加上索引,可以加快连接查询的速度。
在经常需要排序(order by)分组(group by)和 distinct 列上加索引,可以加快排序查询的时间,单独(order by)用不了索引,索引考虑加 where 或加 limit。
在一些 where 之后的 < <= > >= BETWEEN IN 以及某个情况下的 like 建立字段的索引 (B-TREE)
like 语句,如果你对 nickname 字段建立了一个索引。当查询的时候的语句是 nickname lick ‘