所谓索引就是为特定的mysql字段进行一些特定的算法排序,比如二叉树的算法和哈希算法,哈希算法是通过建立特征值,然后根据特征值来快速查找。MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。

创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。

实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。

上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。

建立索引会占用磁盘空间的索引文件。

一、索引的类型

1.UNIQUE唯一索引

不可以出现相同的值,可以有NULL值。

2.INDEX普通索引

允许出现相同的索引内容。

3.PRIMARY KEY主键索引

不允许出现相同的值,且不能为NULL值,一个表只能有一个primary_key索引。

4.fulltext index 全文索引

上述前三种索引都是针对列的值发挥作用,但全文索引,可以针对值中的某个单词,比如一篇文章中的某个词,然而实际效用低下,因为只有myisam以及英文支持,并且效率让人不敢恭维。

二、索引的创建

索引的创建方法有3种:

1.直接打开设计表,在索引栏目下添加索引。

2.CREATE INDEX可对表增加普通索引或UNIQUE索引。

--例:只能添加这两种索引,不能添加主键索引和全文索引

CREATE INDEX index_name ON table_name (column_list)

CREATE UNIQUE INDEX index_name ON table_name (column_list)

eg:CREATE INDEX idx_ename ON emp(ename)

3.ALTER TABLE适用于表创建完毕之后再添加。

ALTER TABLE 表名 ADD 索引类型 (unique,primary key,fulltext,index)[索引名](字段名)

ALTER TABLE table_name ADD INDEX index_name (column_list) -- 索引名,可要可不要;如果不要,当前的索引名就是该字段名。

eg:ALTER TABLE dept ADD INDEX idx_deptno (deptno)   #普通索引,索引名为idx_deptno

  ALTER TABLE dept ADD INDEX(deptno)    #普通索引,索引名默认为deptno

ALTER TABLE table_name ADD UNIQUE (column_list)    #唯一索引

ALTER TABLE table_name ADD PRIMARY KEY (column_list)   #主键索引

eg:ALTER TABLE dept ADD PRIMARY KEY idx_deptno(deptno)

ALTER TABLE table_name ADD FULLTEXT KEY (column_list)  #全文索引,一般不用

三、索引的删除

1.直接打开设计表,在索引栏目下删除索引。

2.DROP INDEX:

DROP INDEX index_name ON table_name

eg:DROP INDEX deptno ON dept

3.ALTER TABLE:

ALTER TABLE table_name DROP INDEX index_name

eg:ALTER TABLE dept DROP INDEX deptno

PS:这两句都是等价的,都是删除掉table_name中的索引index_name

4.删除主键索引

ALTER TABLE table_name DRP PRIMARY KEY -- 删除主键索引,注意主键索引只能用这种方式删除

eg:ALTER TABLE dept DROP PRIMARY KEY

四、索引的查看与更改

1.索引的查看

show index from tablename

eg:SHOW INDEX from dept

2.索引的更改

更改个毛线,删掉重建一个既可

 

 

最新文章

  1. jdbc java数据库连接 5)CallableStatement 接口
  2. iOS中常用属性的关键字的使用说明
  3. T-SQL 语句的理解
  4. 20161020001 DataGridView 选中的 DataGridViewCheckBoxCell 不添加重复项
  5. SQLiteDatabase浅谈
  6. 【bzoj1007】[HNOI2008]水平可见直线
  7. PDF打印
  8. android studio简易了解第二部分
  9. 如何用 Retrofit 2 在安卓上实现 HTTP 访问?
  10. 通过代理访问nginx和直接访问nginx区别
  11. Linux —— Shell编程之变量赋值和引用
  12. zabbix 实现curl 显示器
  13. linux搭建phantomjs+webdriver+testng+ant自动化工程
  14. 利用cropper插件裁剪本地图片,然后将裁剪过后的base64图片上传至七牛云空间
  15. Eclipse的优化
  16. js设置元素不能编辑
  17. Docker学习笔记之编写 Docker Compose 项目
  18. Python+Selenium爬取动态加载页面(1)
  19. js验证4位数字
  20. Jmeter content-type:multipart/form-data温故

热门文章

  1. Druid-代码段-1-1
  2. Codeforces Round #593 (Div. 2)
  3. python-openCV 绘制图形
  4. 【LOJ2402】「THUPC 2017」天天爱射击 / Shooting(整体二分)
  5. Linux服务器下配置Java环境、JDK
  6. Java连载48-final关键字
  7. python3编码问题总结
  8. pytorch_模型参数-保存,加载,打印
  9. 【Oracle命令】sql语句之排序(order by)
  10. MongoDB 修改数据Cannot change the size of a document in a capped collection: * != *"