玖叶教程网

前端编程开发入门

mysql 数据库中,什么情况下设置了索引但无法使用?

(1) 索引的作用:在数据库表中对字段建立索引可以大大 提高查询速度。

(2) Mysql 索引类型:

a) 普通索引

b) 唯一索引:唯一索引列的值必须唯一允许有空值,如果是组合索

引,则列值的组合必须唯一:

CREATE UNIQUE INDEX indexName ON mytable(username(length))

-- 修改表结构

ALTER mytable ADD UNIQUE [indexName] ON (username(length))

-- 创建表的时候直接指定

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16)

NOT NULL, UNIQUE [indexName] (username(length)) );

c) 主键索引:一种特殊的唯一索引,不允许有空值,一般在创建表

的时候创建主键索引:

CREATE TABLE mytable( ID INT NOT NULL, username

VARCHAR(16) NOT NULL, PRIMARY KEY(ID) );

d) 组合索引:

CREATE TABLE mytable( ID INT NOT NULL, username

VARCHAR(16) NOT NULL, city VARCHAR(50) NOT NULL, age INT

NOT NULL );

为了进一步榨取 MySQL 的效率,就要考虑建立组合索引。就是

将 name, city, age 建到一个索引里:代码如下:

ALTER TABLE mytable ADD INDEX name_city_age

(name(10),city,age);

(3) 什么情况下有索引,但用不上?

a) 如果条件中有 OR,即使其中有部分条件带索引也不会使用。注 意:要想使用 or,又想让索引生效,只能将 or 条件中的每个列都加上索引。

b) 对于多了索引, 不是使用的第一部分,则不会使用索引。

c) Like 查询以%开头,不使用索引

d) 存在索引列的数据类型隐形转换,则用不上索引,比如列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

e) Where 子句里对索引列上有数学运算,用不上索引

f) Where 子句中对索引列使用函数,用不上索引

g) Mysql 估计使用全表扫描要比用索引快,不使用索引

(4) 什么情况下不推荐使用索引?

a) 数据唯一性差的字段不要使用索引

b) 频繁更新的字段不要使用索引

c) 字段不在 where 语句中出现时不要添加索引,如果 where 后含IS NULL/IS NOT NULL/LIKE ‘%输入符%’等条件,不要使用索引

d) Where 子句里对索引使用不等于(<>),不建议使用索引,效果

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言