精华内容
下载资源
问答
  • mysql建立索引的原则

    2020-04-09 09:30:48
    1.选择唯一性索引 唯一性索引的唯一的可以更快速的通过该...2.经常需要排序、分组和联合操作的字段建立索引 经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间。如果...
    1.选择唯一性索引
    唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。例如,学生表中学号是具有唯一性的字段。为该字段建立唯一性索引可以很快的确定某个学生的信息。如果使用姓名的话,可能存在同名现象,从而降低查询速度。
    2.为经常需要排序、分组和联合操作的字段建立索引
    经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间。如果为其建立索引,可以有效地避免排序操作。
    3.为常作为查询条件的字段建立索引
    如果某个字段经常用来做查询条件,那么该字段的查询速度会影响整个表的查询速度。因此,为这样的字段建立索引,可以提高整个表的查询速度。
    4.限制索引的数目
    索引的数目不是越多越好。每个索引都需要占用磁盘空间,索引越多,需要的磁盘空间就越大。修改表时,对索引的重构和更新很麻烦。越多的索引,会使更新表变得很浪费时间。
    5.尽量使用数据量少的索引
    如果索引的值很长,那么查询的速度会受到影响。例如,对一个CHAR(100)类型的字段进行全文检索需要的时间肯定要比对CHAR(10)类型的字段需要的时间要多。
    6.尽量使用前缀来索引
    如果索引字段的值很长,最好使用值的前缀来索引。例如,TEXT和BLOG类型的字段,进行全文检索会很浪费时间。如果只检索字段的前面的若干个字符,这样可以提高检索速度。
    7.删除不再使用或者很少使用的索引
    表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再需要。数据库管理员应当定期找出这些索引,将它们删除,从而减少索引对更新操作的影响。
    8 . 最左前缀匹配原则,非常重要的原则。
    mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a 1=”” and=”” b=”2” c=”“> 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。
    9 .=和in可以乱序。
    比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式
    10 . 尽量选择区分度高的列作为索引。
    区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就 是0,那可能有人会问,这个比例有什么经验值吗?使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条 记录
    11 .索引列不能参与计算,保持列“干净”。
    比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本 太大。所以语句应该写成create_time = unix_timestamp(’2014-05-29’);
    12 .尽量的扩展索引,不要新建索引。 
    比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可
    13、当单个索引字段查询数据很多,区分度都不是很大时,则需要考虑建立联合索引来提高查询效率
    转自:https://www.cnblogs.com/chenhaoyu/p/8761305.html
     
    展开全文
  • 2.经常需要排序、分组和联合操作的字段建立索引 经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间。如果其建立索引,可以有效地避免排序操作。 3.常作为查询条件的字段...

    1.选择唯一性索引

    唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。例如,学生表中学号是具有唯一性的字段。为该字段建立唯一性索引可以很快的确定某个学生的信息。如果使用姓名的话,可能存在同名现象,从而降低查询速度。

    2.为经常需要排序、分组和联合操作的字段建立索引

    经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间。如果为其建立索引,可以有效地避免排序操作。

    3.为常作为查询条件的字段建立索引

    如果某个字段经常用来做查询条件,那么该字段的查询速度会影响整个表的查询速度。因此,为这样的字段建立索引,可以提高整个表的查询速度。

    4.限制索引的数目

    索引的数目不是越多越好。每个索引都需要占用磁盘空间,索引越多,需要的磁盘空间就越大。修改表时,对索引的重构和更新很麻烦。越多的索引,会使更新表变得很浪费时间。

    5.尽量使用数据量少的索引

    如果索引的值很长,那么查询的速度会受到影响。例如,对一个CHAR(100)类型的字段进行全文检索需要的时间肯定要比对CHAR(10)类型的字段需要的时间要多。

    6.尽量使用前缀来索引

    如果索引字段的值很长,最好使用值的前缀来索引。例如,TEXT和BLOG类型的字段,进行全文检索会很浪费时间。如果只检索字段的前面的若干个字符,这样可以提高检索速度。

    7.删除不再使用或者很少使用的索引

    表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再需要。数据库管理员应当定期找出这些索引,将它们删除,从而减少索引对更新操作的影响。

    8 . 最左前缀匹配原则,非常重要的原则。

    mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a 1=”” and=”” b=”2” c=”“> 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。

    9 .=和in可以乱序。

    比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式

    10 . 尽量选择区分度高的列作为索引。

    区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就 是0,那可能有人会问,这个比例有什么经验值吗?使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条 记录

    11 .索引列不能参与计算,保持列“干净”。

    比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本 太大。所以语句应该写成create_time = unix_timestamp(’2014-05-29’);

    12 .尽量的扩展索引,不要新建索引。 
    比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可

    13、当单个索引字段查询数据很多,区分度都不是很大时,则需要考虑建立联合索引来提高查询效率

    注意:选择索引的最终目的是为了使查询的速度变快。上面给出的原则是最基本的准则,但不能拘泥于上面的准则。读者要在以后的学习和工作中进行不断的实践。根据应用的实际情况进行分析和判断,选择最合适的索引方式。

     标准sql执行顺序

    展开全文
  • 经常需要排序、分组和联合操作的字段建立索引 经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间。如果其建立索引,可以有效地避免排序操作。 常作为查询条件的字段建立...

    使用MySQL索引都有什么原则?

    1. 选择唯一性索引

      唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。例如,学生表中学号是具有唯一性的字段。为该字段建立唯一性索引可以很快的确定某个学生的信息。如果使用姓名的话,可能存在同名现象,从而降低查询速度。

    2. 为经常需要排序、分组和联合操作的字段建立索引

      经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间。如果为其建立索引,可以有效地避免排序操作。

    3. 为常作为查询条件的字段建立索引

      如果某个字段经常用来做查询条件,那么该字段的查询速度会影响整个表的查询速度。因此,为这样的字段建立索引,可以提高整个表的查询速度。

    4. 限制索引的数目

      索引的数目不是越多越好。每个索引都需要占用磁盘空间,索引越多,需要的磁盘空间就越大。修改表时,对索引的重构和更新很麻烦。越多的索引,会使更新表变得很浪费时间。

    5. 尽量使用数据量少的索引

      如果索引的值很长,那么查询的速度会受到影响。例如,对一个CHAR(100)类型的字段进行全文检索需要的时间肯定要比对CHAR(10)类型的字段需要的时间要多。

    6. 尽量使用前缀来索引

      如果索引字段的值很长,最好使用值的前缀来索引。例如,TEXT和BLOG类型的字段,进行全文检索会很浪费时间。如果只检索字段的前面的若干个字符,这样可以提高检索速度。

    7. 删除不再使用或者很少使用的索引

      表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再需要。数据库管理员应当定期找出这些索引,将它们删除,从而减少索引对更新操作的影响。

    8. 最左前缀匹配原则,非常重要的原则。

      mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a=1 and b=2 and c>3 and d=4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。

    9. =和in可以乱序。

      比如a=1 and b=2 and c=3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式。

    10. 尽量选择区分度高的列作为索引。

      区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就是0,那可能有人会问,这个比例有什么经验值吗?使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条记录。

    11. 索引列不能参与计算,保持列“干净”

      比如from_unixtime(create_time) = '2014-05-29’就不能使用到索引,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本太大。所以语句应该写成create_time = unix_timestamp(‘2014-05-29’)。

    12. 尽量的扩展索引,不要新建索引。
      比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。

    MySQL索引如何使用

    1. 在连接查询join语句执行过程中,驱动表是走全表扫描,而被驱动表是走树搜索。所以我们尽量需要让小表做驱动表。(在决定哪个表做驱动表的时候,应该是两个表按照各自的条件过滤,过滤完成之后,计算参与join的各个字段的总数据量,数据量小的那个表,就是“小表”,应该作为驱动表)
    2. 尽量使用连接查询代替子查询,子查询效率太差,执行子查询时,MYSQL 需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程
    3. 索引列务必重复度低,where 条件字段上需要建立索引
    4. 使用索引就不能用OR查询,否则索引不起作用
    5. 使用索引,like模糊查询不能以%开头
    6. 查询条件务必以索引列开头,否则索引失效
    7. 复合索引遵守最左原则
    8. 根据业务场景建立覆盖索引只查询业务需要的字段,如果这些字段被索引覆盖,将极大的提高查询效率
    9. 多表连接的字段上需要建立索引,这样可以极大提高表连接的效率
    10. where 条件字段上需要建立索引,但Where 条件上不要使用运算函数,以免索引失效
    11. 排序字段上,分组字段上需要建立索引
    12. 优化insert语句:批量列插入数据要比单个列插入数据效率高
    展开全文
  • 主键索引可以为空 主键索引可以做外键 一张表中只能有一个主键索引 普通索引: 用来加速数据访问速度而建立索引。多建立在经常出现在查询条件的字段和经常用于排序的字段。 被索引的数据列允许包含重复的 ...

    主键索引:

    • 主键索引不可以为空
    • 主键索引可以做外键
    • 一张表中只能有一个主键索引

    普通索引:

    • 用来加速数据访问速度而建立的索引。多建立在经常出现在查询条件的字段和经常用于排序的字段。
    • 被索引的数据列允许包含重复的值

    唯一索引:

    • 被索引的数据列不允许包含重复的值

     

     

    以下内容转载自:https://blog.csdn.net/qq_41618510/article/details/83317969

    查询的优化:

    哈希索引

     InnoDB引擎有一个特殊的功能叫做“自适应哈希索引(adaptive hash index)”。  当InnoDB注意到某些索引值被使用得非常频繁时,它会在内存中基于B-Tree索引之上再创建-一个哈希索引,这样就让B-Tree索引也具有哈希索引的一些优点,比如快速的哈希查找。这是一个完全自动的、内部的行为,用户无法控制或者配置,不过如果有必要,完全可以关闭该功能。


          创建自定义哈希索引。如果存储引擎不支持哈希索引,则可以模拟像InnoDB一样创建哈希索引,这可以享受- -些哈希索引的便利,例如只需要很小的索引就可以为超长的键创建索引。

          思路很简单:在B-Tree基础.上创建-一个伪哈希索引。这和真正的哈希索引不是一回事,因为还是使用B-Tree进行查找,但是它使用哈希值而不是键本身进行索引查找。你需要做的就是在查询的WHERE子句中手动指定使用哈希函数。

          下面是一个实例,  例如需要存储大量的URL,并需要根据URL进行搜索查找。如果使用B-Tree来存储URL,存储的内容就会很大,  因为URL本身都很长。正常情况下会有如下查询:

          mysql> SELECT id FROM url WHERE url="http: //ww.mysq1.com" ;

          若删除原来URL列.上的索引,而新增-一个被索引的url_ crc 列,使用CRC32做哈希,就可以使用下面的方式查询:

    mysql> SELECT id FROM url WHERE url="http://www.mysq1. com"
    AND url_ crc=CRC32("http://www.mysq1.com");

    这样做的性能会非常高,因为MySQL优化器会使用这个选择性很高而体积很小的基于url_ crc列的索引来完成查找(在上面的案例中,索引值为1560514994)。即使有多个记录有相同的索引值,查找仍然很快,只需要根据哈希值做快速的整数比较就能找到索引条目,然后----比较返回对应的行。另外一种方式就是对完整的URL字符串做索引,那样会非常慢。

     

     

    展开全文
  • MySQL建立索引原则

    2019-12-26 14:49:37
    1.选择唯一性索引 唯一性索引的唯一的可以更快速的通过该...2.经常需要排序、分组和联合操作的字段建立索引 经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间。如果...
  • mysql中的唯一索引

    2021-01-31 16:47:14
    1. 前言   工作使用数据库是mysql,经常会与唯一索引打交道,借此记录下来...主键和唯一索引可以是表中多个字段的组合,一般只会在一列上建立唯一索引,多列话则会考虑联合索引 关于唯一索引和主键区别一些资
  • 如果需要将多个列设置为索引时,可以采用多列索引 选择唯一索引(名字不行)尽量使用数据量少的索引,删除不再使用或者很少使用的索引,数目不宜太多 索引失效 1.索引列出现函数参数或者表达式 解决方案:事先...
  • 2,经常要排序,分组和联合操作的字段建立索引 3,经常作为查询条件的字段建立索引 4,限制索引的数目:索引太多会使更新表变得浪费时间 5,尽量使用数据量少的索引 6,如果索引的很长,会影响查询的速度 7,最好使用...
  • 2、业务代码能保证不会写入两个重复身份证号(如果业务无法保证,可以依赖数据库的唯一索引来进行约束) 3、常用SQL查询语句:SELECT name FROM CUser WHERE id_card = ‘XXX’ 4、建立索引 身份证号比较大,...
  • 2.经常需要排序、分组和联合操作的字段建立索引 经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间。如果其建立索引,可以有效地避免排序操作。 3.常作为查询条件的字段...
  • 经常需要排序、分组和联合操作的字段建立索引 经常需要order by、group by、distinct、union等操作的字段,排序会浪费很多时间,如果其建立索引可以有效避免排序操作 常作为查询条件的字段建立索引 如果某个...
  • mysql 索引建立规则

    2019-03-01 13:30:00
    (转)仅供自己学习,特此记录 1.选择唯一性索引 唯一性索引的唯一的可以更快速的通过该索...2.经常需要排序、分组和联合操作的字段建立索引 经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段...
  • 视图建立索引 提升查询性能

    千次阅读 2009-03-31 15:14:00
    最近视图的性能烦恼,查阅相关文章后发现可以使用索引来优化性能。有几点需要注意,具体如下:1 视图需要...4 应首先对主键建立聚集唯一索引,然后常用的作为查询条件的字段建立非聚集索引。非聚集索引中要包
  • MySql索引建立规则

    2019-10-08 03:04:04
    为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建...字段建立唯一索引可以很快确定某个学生信息。如果使用姓名话,可能存在同名现象,从而降低查询速度。 2.经常需要排序、分组和...
  • 索引定义:是一个单独的,存储在磁盘上的数据库结构,其包含着对数据表里所有记录的引用指针. ...2.经常需要排序、分组和联合操作的字段建立索引 经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字
  • MySQL索引优化

    千次阅读 2021-03-09 16:25:41
    在MySQL中,我们经常会表中某些字段建立索引,那么怎么通过索引优化我们查询呢? 索引分类与基本概念 索引可以分为以下五种: 普通索引:仅加速查询。 唯一索引:普通索引+列值唯一可以有null)。 ...
  • 怎么提升索引的使用效率,设计出更高效的索引 索引的设计可以遵循一些已有的原则,创建索引的时候应尽量考虑符合这些...2. 经常需要排序、分组和联合操作的字段建立索引 经常需要 ORDER BY、GROUP BY、DISTINCT 和 U
  • mysql索引的使用规则

    2018-10-24 10:49:45
    分组和联合操作的字段建立索引:经常需要ORDER BY .GROUP BY.DISTINCT.UNION等操作的字段,排序操作会浪费很多的时间,如果其建立索引可以有效的避免排序操作 3. 经常使用查询条件的字段建立索引: 如果某个字段...
  • 高性能的索引策略

    2019-01-01 11:30:21
    一 建立索引的原则 1.选择唯一性索引 唯一性索引的唯一的可以更快速的通过该索...2.经常需要排序、分组和联合操作的字段建立索引 经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作...
  • MySQL索引的设计原则

    2021-05-09 10:11:26
    索引的设计可以遵循一些已有的原则,创建索引的时候应尽量考虑符合这些原则,便于提升索引的使用效率,更...经常需要排序、分组和联合操作的字段建立索引 经常需要 ORDER BY、GROUP BY、DISTINCT 和 UNION 等操作的
  • Mysql 索引的设计原则

    2021-02-26 13:12:34
    索引的设计可以遵循一些已有的原则,创建索引的时候应尽量考虑符合这些原则,便于提升索引的使用效率,更高效的...2. 经常需要排序、分组和联合操作的字段建立索引 经常需要 ORDER BY、GROUP BY、DISTINCT 和 UNIO

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 276
精华内容 110
关键字:

可以为值唯一的字段建立索引