建立索引的优缺点:

为什么要创建索引呢?

这是因为,创建索引可以大大提高系统的性能。
       第一、通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
       第二、可以大大加快 数据的检索速度,这也是创建索引的最主要的原因。
       第三、可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
       第四、在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
       第五、通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

也许会有人要问:增加索引有如此多的优点,为什么不对表中的每一个列创建一个索引呢?这种想法固然有其合理性,然而也有其片面性。虽然,索引有许多优点, 但是,为表中的每一个列都增加索引,是非常不明智的。

这是因为,增加索引也有许多不利的一个方面:

第一、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。

第二、索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间。如果要建立聚簇索引,那么需要的空间就会更大。

第三、当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

什么样的字段适合创建索引:

索引是建立在数据库表中的某些列的上面。因此,在创建索引的时候,应该仔细考虑在哪些列上可以创建索引,在哪些列上不能创建索引。

一般来说,应该在这些列上创建索引,例如:

第一、在经常需要搜索的列上,可以加快搜索的速度;

第二、在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;

第三、在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;

第四、在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;

第五、在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;

第六、在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

建立索引,一般按照select的where条件来建立,比如: select的条件是where f1 and f2,那么如果我们在字段f1或字段f2上简历索引是没有用的,只有在字段f1和f2上同时建立索引才有用等。

什么样的字段不适合创建索引:

同样,对于有些列不应该创建索引。一般来说,不应该创建索引的的这些列具有下列特点:

第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,

并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。
      第二,对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,

在查询的结果中,结果集的数据行占了表中数据行的很大比 例,即需要在表中搜索的数据行的比例很大。

增加索引,并不能明显加快检索速度。
      第三,对于那些定义为text, p_w_picpath和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。
       第四,当修改性能远远大于检索性能时,不应该创建索 引。这是因为,修改性能和检索性能是互相矛盾的。

当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。

因此,当修改性能远远大于检索性能时,不应该创建索引。

创建索引的方法::

1、创建索引,例如 create index <索引的名字> on table_name (列的列表);
     2、修改表,例如 alter table table_name add index[索引的名字] (列的列表);
     3、创建表的时候指定索引,例如create table table_name ( [...], INDEX [索引的名字] (列的列表) );

查看表中索引的方法:

show index from table_name; 查看索引

索引的类型及创建例子::

1.PRIMARY KEY (主键索引)

mysql> alter table table_name add primary key ( `column` )

2.UNIQUE 或 UNIQUE KEY (唯一索引)

mysql> alter table table_name add unique (`column`)

    3.FULLTEXT (全文索引)
    mysql> alter table table_name add fulltext (`column` )

4.INDEX (普通索引)
    mysql> alter table table_name add index index_name ( `column` )

5.多列索引 (聚簇索引)
     mysql> alter table `table_name` add index index_name ( `column1`, `column2`, `column3` )

修改表中的索引:

alter table tablename drop primary key,add primary key(fileda,filedb)

数据库建立索引的优缺点及适合建立索引的字段相关推荐

  1. MySQL索引优化:索引失效以及不适合建立索引的场景

    引言: 索引是有双面性的,合理的建立索引可以提高数据库的效率.但是如果没有合理的构建索引和使用索引,可能会导致索引失效或者影响数据库性能,本文主要讨论的是索引失效以及不适合建立索引的场景 结论:具体案 ...

  2. 对数据库索引的理解及适合建立索引的字段

    因本人小白,总结一下别人总结的,勿怪勿怪.转载深入浅出数据库索引原理,哪些字段适合建立索引 问题 为什么要给表加上主键? 为什么加索引后会使查询变快? 为什么加索引后会使写入.修改.删除变慢? 什么情 ...

  3. 什么是索引?什么条件适合建立索引?什么条件不适合建立索引?

    索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录数量越多 ...

  4. MySQL~索引设计原则:适合创建索引的11种情况、不适合创建索引的7种情况

    文章目录 数据的准备 适合创建索引 不适合创建索引 数据的准备 #1. 数据的准备CREATE DATABASE atguigudb1;USE atguigudb1;#1.创建学生表和课程表 CREA ...

  5. 索引的优缺点以及如何创建索引

    优点: 1.大大加快数据的检索速度; 2.创建唯一性索引,保证数据库表中每一行数据的唯一性; 3.加速表和表之间的连接; 4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间. ...

  6. mysql建立索引 有什么缺陷_MySQL数据库建立索引的优缺点以及什么样的字段适合建立索引...

    建立索引的优缺点: 为什么要创建索引呢? 这是因为,创建索引可以大大提高系统的性能. 第一.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性. 第二.可以大大加快 数据的检索速度,这也是创建索 ...

  7. mysql建立索引的优缺点|创建索引alter或create索引分类(PRIMARY KEY,UNIQUE KEY,FULLTEXT,INDEX)作用查看索引show index from table

    建立索引的优缺点: 为什么要创建索引呢? 这是因为,创建索引可以大大提高系统的性能.          第一.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性.          第二.可以大 ...

  8. MySQL索引优化:哪些情况下需要建立索引(适合构建索引的几种情况)

    适合构建索引的几种情况: 引言 我们知道正确的建立索引可以加快数据库的查询,但是如果索引建立不当,或者随意的建立过多索引不仅不会提升数据库的效率,反而在进行数据更新操作的时候需要耗费系统资源对索引进行 ...

  9. 阿里面试:分析为什么B+树更适合作为索引的结构以及索引原理

    mysql的B+树索引 查找使用了二分查找,redis 跳表也使用了二分查找法,kafka查询消息日志也使用了二分查找法,二分查找法时间复杂度O(logn); 在MySQL中,主要有四种类型的索引,分 ...

  10. 一步步分析为什么B+树适合作为索引的结构

    前言 本文是在讲述什么样的数据结构适合作为索引,以及其适合作为索引的原因.而阅读本文需要对B树和B+树结构有稍微的理解.以及需要对磁盘操作知识有稍微的了解.对于磁盘操作的相关知识,在文章尾部的链接文章 ...

最新文章

  1. AI开发难?请收下华为云AI大拿秘籍一份!
  2. [bat批处理文件] 压缩备份
  3. Oracle Study之--PL/SQL Developer软件错误
  4. JAVA-封装-静态属性
  5. java 中required_通过实例学习Spring @Required注释原理
  6. mysql5720_Mysql内置功能《五》 函数
  7. 挖掘机燃料_2020广东挖掘机工程机械出租公司合作共赢
  8. 两个数相乘积一定比每个因数都大_小升初数学知识点大全含公式+20类必考应用题(含答案解析),孩子考试一定用得上!...
  9. 王道考研 计算机网络1 计算机网络概念,组成,功能和分类
  10. p2093 [国家集训队]JZPFAR
  11. SAP MM T-Code
  12. IT营大地老师2017最新node.js视频教程avi版本(课件+源码+视频)
  13. DCE/MS RPC旁窥
  14. 坚持自主可控,长安链ChainMaker全面拥抱国密的技术实践
  15. OpenCV轮廓最大内接矩形(带角度)-计算与绘制(Python / C++源码)
  16. echarts地图设置区块点击后颜色不改变
  17. SpringBoot基础学习之整合Swagger框架(上篇)
  18. 同wifi,手机控制电脑以及智能家具实现代码
  19. python爬虫 — 爬取淘宝商品信息
  20. RK3399 Android7.1如何查看屏幕分辨率

热门文章

  1. PHP和mysql开发谷歌地图
  2. java求立方体表面积和体积_设计一个立方体类BOX,它能计算并输出立方体的体积和表面积...
  3. 游戏设计的100个原理(6-10)
  4. PPC软件测试自学,一个成功的PPC广告活动所需的五个步骤
  5. Windows Server 2012 R2 Update 64位 MSDN原版
  6. 【JanusGraph入门】(第一天,下载项目)
  7. Thinkphp企业级知宇自动发卡系统源码bug漏洞分析
  8. html运行页面一直处在加载状态的解决
  9. 网页中常用加载页面的实现原理
  10. alisql mysql_AliSQL · 特性介绍 · 动态加字段