• MySQL数据库索引


    1、需要用到索引的情况:数据量较大时

    2、使用索引的代价:数据更新时,索引文件也要更新

    3、什么样的查询会用到索引:

      最左前缀原理(索引条件紧跟where)

      全列匹配,按照索引中所有列进行精确匹配(这里的精确匹配指的是“=”或“IN”)

      查询条件用到了索引中列的精确匹配,但是中间某个未提供,用到了索引(只用到最左)

      使用like查询时%不在第一位,比如select * from table where rolename like ‘苏铭%’

      一次查询只会用到一个索引,查询时尽量遵循最左前缀原理

    4、什么样的查询不会用到索引:

      查询条件中不包含索引列(显然)

      索引列使用了函数或表达式,如select * from table_name where to_days(col_time) >= 729669,col_time使用了函数,不能使用索引,可以改成这样,select * from table_name where col_time<FROM_DAYS(729669) 。当然最好是把FROM_DAYS(729669)通过程序实现传递给Sql语句。

      索引列使用like查询的时候%在前面,如select * from table where rolename like ‘%铭枫’,此时即使rolename列建立了索引在查询的时候也不会被使用

    5、其他用到索引的条件:

      不使用<> ,用or 代替

      不使用!= 和not in,用not exists代替

      不使用is null 和 is not null

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

      使用匹配的数据类型,查询时字段数据类型和查询条件值数据类型要统一(显然),要特别注意区分数据库中的date和datetime

    6、两种创建索引的方式:

      CREATE INDEX index_name ON table_name (column)

      ALTER TABLE table_name ADD INDEX index_name (column)

    7、删除索引的方式:

      DROP INDEX index_name ON table_name

      ALTER TABLE table_name DROP INDEX index_name

      ALTER TABLE table_name DROP PRIMARY KEY(删除主键索引)

    8、B+树索引和Hash索引:

      Innodb和MyISAM默认的索引是B+树索引;而Mermory默认的索引是Hash索引。

      B+树索引可以等值判断和范围查询,而hash索引只能适用于等值判断。

    9、强制使用索引和禁止使用索引:

      select * from table force index(PRI) limit 2;(强制使用主键索引)

      select * from table ignore index(PRI) limit 2;(禁止使用主键索引)

  • 相关阅读:
    202011.19
    202011.18
    202011.17
    202011.16
    202011.14
    jdk的下载和配置
    layui中form表单
    JS中utocomplete
    转:JqueryUI学习笔记-自动完成autocomplete
    JSON.parse()与JSON.stringify()的区别
  • 原文地址:https://www.cnblogs.com/csfeng/p/8670011.html
Copyright © 2020-2023  润新知