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

    2016-05-10 16:32:00
    1、索引创建原则: 在经常需要搜索的列上创建索引,将加快查询速度。 在作为主键的列上创建索引,强制该列的...在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快查询速度。 ...

    1、索引创建原则:

    • 在经常需要搜索的列上创建索引,将加快查询速度。
    • 在作为主键的列上创建索引,强制该列的唯一性和组织表中数据的排列结构。
    • 在经常用于连接的列(主要是外键)上创建索引,加快连接的速度。
    • 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的。
    • 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快查询速度。
    • 在经常使用于WHERE子句中的列上创建索引,加快条件的判断速度。

    2、无需创建索引的情况

    • 定义为text、image和bit数据类型的列不应该增加索引。
    • 当修改性能远远大于检索性能时,不应该创建索引。修改性能和检索性能时互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。
    • 在查询中很少使用或者参考的列不应该创建索引。既然这些列很少用到,因此有无索引并不能明显改变查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大空间需求。
    • 只有很少数据值的列也不应该增加索引。由于这些列的取值很少,增加索引并不能明显加快检索速度。

    阿里云DBA干货分享

    半模糊可以可以使用到索引,全模糊在上面场景是不能使用到索引的,但可以进行一些改进,比如:  
    select book.*  from book , (select book_id from book where book_name like '%算法%')  book_search_id    
    where book.book_id=book_search_id.book_id;   
    注意这里book_id是主键,同时在book_name上创建了索引  

    转载于:https://www.cnblogs.com/qtxy/p/5478322.html

    展开全文
  • MySql创建索引的原则

    2020-08-28 11:15:24
    所以这一块也是面试中的重点,那么,MySql创建索引的原则有哪些呢? 一般来说,在mysql中使用索引的原则有以下几点: 1、 对于查询频率高的字段创建索引; 索引的目的就是提升查询速度,这一点毋庸置疑。所以对于...

    MySql索引的使用一直是工作中的重点,一个线上项目如果不能合理使用索引,那带来的危害可能是毁灭性的(数据库锁死、当机等)。

    所以这一块也是面试中的重点,那么,MySql创建索引的原则有哪些呢?

    一般来说,在mysql中使用索引的原则有以下几点:

    1、 对于查询频率高的字段创建索引;

    索引的目的就是提升查询速度,这一点毋庸置疑。所以对于查询频率高的字段要创建索引,如:用户表的手机号。

    2、 对排序、分组、联合查询频率高的字段创建索引; 

    3、 索引的数目不宜太多

    • 每创建一个索引都会占用相应的物理控件;
    • 过多的索引会导致insert、update、delete语句的执行效率降低;

    4、若在实际中,需要将多个列设置索引时,可以采用多列索引

    如:某个表(假设表名为Student),存在多个字段(StudentNo, StudentName, Sex, Address, Phone, BirthDate),其中需要对StudentNo,StudentName字段进行查询,对Sex字段进行分组,对BirthDate字段进行排序,此时可以创建多列索引

    复制代码

    index index_name (StudentNo, StudentName, Sex, BirthDate);      #index_name为索引名
    

    在上面的语句中只创建了一个索引,但是对4个字段都赋予了索引的功能。

    创建多列索引,需要遵循BTree类型,即第一列使用时,才启用索引。

    在上面的创建语句中,只有mysql语句在使用到StudentNo字段时,索引才会被启用,如:     

    复制代码

    select * from Student where StudentNo = 1000;      #使用到了StudentNo字段,索引被启用。
    

    可以使用explain检测索引是否被启用,如:

    复制代码

    explain select * from Student where StudentNo = 1000;

    MySql创建索引的原则,知道这些,你再也不用担心面试了!

    附:EXPLAIN列的解释

    • table:显示这一行的数据是关于哪张表的
    • type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index和ALL
    • type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
      一般来说,得保证查询至少达到range级别,最好能达到ref。
    • possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句
    • key: 实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引
    • key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好
    • ref:显示索引的哪一列被使用了,如果可能的话,是一个常数
    • rows:MYSQL认为必须检查的用来返回请求数据的行数
    • Extra:关于MYSQL如何解析查询的额外信息。将在表4.3中讨论,但这里可以看到的坏的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢

    5、选择唯一性索引

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

    6、尽量使用数据量少的索引

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

    7、尽量使用前缀来索引

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

    8、删除不再使用或者很少使用的索引

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

    展开全文
  • mysql创建索引的原则

    2019-06-11 11:06:57
    mysql创建索引的原则 在mysql中使用索引的原则有以下几点: 1、 对于查询频率高的字段创建索引; 2、 对排序、分组、联合查询频率高的字段创建索引; 3、 索引的数目不宜太多 原因:a、每创建一个索引...

    转自:https://www.cnblogs.com/helloworldlx/p/8651583.html

    mysql创建索引的原则

    在mysql中使用索引的原则有以下几点:

     

    1、 对于查询频率高的字段创建索引;

     

    2、 对排序、分组、联合查询频率高的字段创建索引;

     

    3、 索引的数目不宜太多

          原因:a、每创建一个索引都会占用相应的物理控件;

                b、过多的索引会导致insert、update、delete语句的执行效率降低;

     

    4、若在实际中,需要将多个列设置索引时,可以采用多列索引

          如:某个表(假设表名为Student),存在多个字段(StudentNo, StudentName, Sex, Address, Phone, BirthDate),其中需要对StudentNo,StudentName字段进行查询,对Sex字段进行分组,对BirthDate字段进行排序,此时可以创建多列索引

          index index_name (StudentNo, StudentName, Sex, BirthDate);      #index_name为索引名

          在上面的语句中只创建了一个索引,但是对4个字段都赋予了索引的功能。

           创建多列索引,需要遵循BTree类型,

           即第一列使用时,才启用索引。

           在上面的创建语句中,只有mysql语句在使用到StudentNo字段时,索引才会被启用。

           如:     select * from Student where StudentNo = 1000;      #使用到了StudentNo字段,索引被启用。

           可以使用explain检测索引是否被启用

            如:explain select * from Student where StudentNo = 1000;

     

    5、选择唯一性索引

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

     

    6、尽量使用数据量少的索引

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

     

    7、尽量使用前缀来索引

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

     

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

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

     

    PS:部分内容借鉴与https://blog.csdn.net/csdnones/article/details/50412603

    展开全文
  • 阅读文本大概需要20分钟。创建索引的原则为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引。本小节将向读者介绍一些索引的设计原则。0x01、选择唯一...

    阅读文本大概需要20分钟。

    创建索引的原则

    为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引。本小节将向读者介绍一些索引的设计原则。

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

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

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

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

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

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

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

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

    索引的情况

    0x01、like 以%开头,索引无效;当like前缀没有%,后缀有%时,索引有效。

    0x02、or语句前后没有同时使用索引。当or左右查询字段只有一个是索引,该索引失效,只有当or左右查询字段均为索引时,才会生效

    0x03、组合索引,不是使用第一列索引,索引失效。

    0x04、数据类型出现隐式转化。如varchar不加单引号的话可能会自动转换为int型,使索引无效,产生全表扫描。

    0x05、在索引列上使用 IS NULL 或 IS NOT NULL操作。索引是不索引空值的,所以这样的操作不能使用索引,可以用其他的办法处理,例如:数字类型,判断大于0,字符串类型设置一个默认值,判断是否等于默认值即可。

    0x06、在索引字段上使用not,<>,!=。不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。 优化方法: key<>0 改为 key>0 or key<0。

    0x07、对索引字段进行计算操作、字段上使用函数。(索引为 emp(ename,empno,sal))

    0x08、当全表扫描速度比索引速度快时,mysql会使用全表扫描,此时索引失效。

     

    索引失效分析工具:可以使用explain命令加在要分析的sql语句前面,在执行结果中查看key这一列的值,如果为NULL,说明没有使用索引。explain命令的详细用法,可以参考:https://segmentfault.com/a/1190000008131735

    往期精彩

    01 漫谈发版哪些事,好课程推荐

    02 Linux的常用最危险的命令

    03 互联网支付系统整体架构详解

    04 优秀的Java程序员必须了解的GC哪些

    05 IT大企业有哪些病,别被这些病毁了自己?

    关注我每天进步一点点

    你点的在看,我都当成了喜欢

    展开全文
  • 所以这一块也是面试中的重点,那么,MySql创建索引的原则有哪些呢?一般来说,在mysql中使用索引的原则有以下几点:1、 对于查询频率高的字段创建索引;索引的目的就是提升查询速度,这一点毋庸置疑。所以对于查询...
  • Mysql创建索引的原则
  • 在mysql中使用索引的原则有以下几点:1、 对于查询频率高的字段创建索引;2、 对排序、分组、联合查询频率高的字段创建索引;3、 索引的数目不宜太多原因:a、每创建一个索引都会占用相应的物理控件;b、过多的索引...
  • 72. 创建索引的原则

    2020-12-07 13:47:27
    最左匹配原则,组合索引非常重要的原则,mysql 会一直向右匹配直到遇到范围查询(>,<,between,like)就停止匹配,比如 a = 1 and b = 2 and c > 3 and d = 4,如果建立(a,b,c,d)的索引则可以用到,a,...
  • 继续上一篇的介绍,这里记录索引使用的限制和创建索引的选择
  • MySQL:简述MySQL中创建索引的原则(场景)        在MySQL数据库中使用索引的原则(场景)有以下几点: 1. 对于查询频率高的字段创建索引; 2. 对排序、分组、联合查询频率高的...
  • 在mysql中使用索引的原则有以下几点:1、 对于查询频率高的字段创建索引;2、 对排序、分组、联合查询频率高的字段创建索引;3、 索引的数目不宜太多原因:a、每创建一个索引都会占用相应的物理控件;b、过多的索引...
  • 数据库建立索引的原则 铁律一:天下没有免费的午餐,使用索引是需要付出代价的 索引的优点有目共睹,但是,却很少有人关心过采用索引所需要付出的成本。若数据库管理员能够对索引所需要付出的代价有一个充分...
  • 3)查询较频繁字段创建索引(对于查询涉及较少、重复值比较多列不建立索引) 4)最左前缀匹配原则 5)更新频繁字段不适合创建索引 6)区分度低列不适合做索引列(如性别,男、女、未知,最多也就三种) 8)...
  • 大多数情况下,业务SQL十分复杂,没法优化。所以就要建立索引了。...对经常用于查询的字段创建索引,避免添加不必要的索引 数据量少的表尽量不要使用索引,由于数据较少,查询花费的时间可能比遍历索引的时间...
  • 索引的理解: 索引是对数据库表中的一列或多列的值进行排序的一种数据结构。 索引的作用就类似于书本的目录,新华字典的拼音,偏旁部首的首查字,可以快速的检索到需要 的内容,mysql在300万条记录性能就下降了,...
  • 创建索引的时候,应该考虑在哪些列上可以创建索引,在哪些列上不能创建索引。一、应该创建索引的列一般来说,应该在这些列上创建索引:在经常需要搜索的列上,可以加快搜索的速度;在作为主键的列上,强制该列的...
  • 1) 最左前缀匹配原则,组合索引非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,929
精华内容 771
关键字:

创建索引的原则