SQL索引分类和建索引命令语句
主键索引:索引值必须是唯一的,且不能为NULL
- 第一种:
CREATE TABLE table_name(id int PRIMARY KEY auto_increment,name varchar(10));
- 第二种:
ALTER TABLE table_name ADD PRIMARY KEY (columnName);
普通索引:索引值可出现多次
- 第一种:
CREATE INDEX index_name on table_name(columnName);
- 第二种:
ALTER TABLE table_name ADD INDEX index_name (columnName);
全文索引:主要是针对文本的检索,如:文章,全文索引只针对MyISAM引擎有效,并且只针对英文内容生效
-
建表时创建
#建表 CREATE TABLE articles( id INT UNSIGNED ATUO_INCREMENT NOT NULL PRIMARY KEY, title VARCHAR(200), body TEXT, FULLTEXT(title,body) )engine=myisam charset utf8; #指定存储引擎 #使用 select * from articles where match(title,body) against('英文内容'); #只针对英语内容生效 #说明 #1、在mysql中fultext索引只针对 myisam 生效 #2、mysq1自己提供的flltext只针对英文生效->sphinx (coreseek)技术处理中文工 #3、使用方法是match(字段名...) against(‘关键字') #4、全文索引一个叫停止词,因为在一个文本中创建索引是一个无穷大的数,因此对一些常用词和字符就不会创建,这些词称为停止词
-
ALTER TABLE table_name ADD FULLTEXT index_name (columnName);
唯一索引:索引列的值必须唯一,但允许有空值NULL,并可以有多个。
- 第一种:
CREATE UNIQUE INDEX index_name ON table_name(columnName);
- 第二种:
ALTER TABLE table_name ADD UNIQUE INDEX index_name ON (columnName);
单值索引:即一个索引只包含单个列,一个表可以有多个单列索引。
- 第一种:
CREATE INDEX index_name ON table_name(columnName);
- 第二种:
ALTER TABLE table_name ADD INDEX index_name ON (columnName);
select * from user where name='';
//经常查name字段,为其建索引
create index idx_user_name on user(name);
复合索引:即一个索引包含多个列
- 第一种:
CREATE INDEX index_name ON table_name(columnName1,columnName2...);
- 第二种:
ALTER TABLE table_name ADD INDEX index_name ON (columnName1,columnName2...);
select * from user where name='' and email='';
//经常查name和email字段,为其建索引
create index idx_user_name on user(name, email);
查询索引
- 第一种:
SHOW INDEX FROM table_name;
- 第二种:
SHOW KEYS FROM table_name;
删除索引
- 第一种:
DROP INDEX index_name ON table_name;
- 第二种:
ALTER TABLE table_name DROP INDEX index_name;
- 删除主键索引:
ALTER TBALE table_name DROP PRIMARY KEY;
查看索引的使用情况:show status like 'Handler_ read%';
- handler_ read_ key:这个值越高越好,越高表示使用索引查询到的次数。
- handler_ read_ rnd_next:这 个值越高,说明查询低效。
修改索引通常是先删除再重新建
转载自:https://juejin.cn/post/7133189407506432036