索引 index
作用:加快数据查询速度
注意:
1.不适合在经常变动的数据上建立索引
2.建立在合适的字段上【根据前端业务的业户行为进行分析】
索引是创建在表的层面的,
并且索引的创建是表的一个字段的数值,来创建索引的。
数据中的搜索数据的默认行为是一条一条的搜索数据,而索引就是依据某一个字段的数值,为这个表创建了一个目录,当所有数据的数据可以根据这个表中的目录来所有需要的数据,
在MySQL数据库中有这样一个默认行为,就是当你在创建一个表的时候,会默认在这个表的主键字段,创建一个索引。。。
创建索引的时候,这个索引的字段必须是表中合适的字段【没有明确的标准和定论】。才可以提高这个查询数据的效率。
任何一个数据库都是面向前端的业务。。
当为表创建索引的时候,什么是合适的字段需要根据访问者的行为进行分析。
如上图所示,比如根据网站的日志或者是数据库的日志分析,访问者大都是通过什么字段来搜索产品的?
1.如何查看一张数据表的索引?
数据库会在表的主键字段上默认创建索引。
如上所示,可以使用命令show index from 表名;来查看这个表中有几条索引,以及这个索引的详细信息。【一行数据就代表着一条索引】
这个表的索引名称是PRIMARY 这个索引是建立在这个表的id字段上的。。
如上所示,这个desc 表名的行为是为了查看这个表结构
如上图所示,我们在创建这个表的时候,将这个表的id字段设置成了主键字段,所以就默认以这个id字段创建了一个索引。。
Field 显示了列名。
Type 显示了列的数据类型和长度。
Null 列表示该字段是否可以存储 NULL 值(YES 或 NO)。
Key 列显示了该字段是否被索引,如果有的话是什么类型的索引(例如,PRI 表示主键)。
Default 显示了该字段的默认值。
Extra 提供了额外的信息,比如是否是自动递增字段。
这个命令对于快速查看表结构或检查创建表时设置的选项非常有用。
2.创建索引
语法:
create index 索引名称 on 表名(字段名称,字段名称)
如上图所示,我们这个索引名称是server_ip_key,,创建在表server_info的server_ip字段上。。
如上图所示,这个表中有两个索引,使用的是show index from 表名\G来查看这个表的索引信息。
3.删除索引
drop index 索引名称 on 表名
随后可以使用show index from 表名;
来查看到这个表中的索引信息。。
4.验证索引的作用?
在MySQL中如何验证有索引和无索引在工作流程上的区别呢?
在MySQL数据库中有一个查询分析器的东西。。
这个查询分析器可以帮助我们分析一个select语句是怎么获取到数据的,。
启用查询分析器
如上图所示,这是使用explain这个查询分析器来查看select语句的工作流程。
首先的select_type这个是代表的是这个查询的类型,而simple代表这个查询类型是简单查询。
table代表的是查询的test1这个数据表。。
而key代表的是使用这个select的时候,所使用的索引。
而rows代表的是,执行这个select语句的时候,所查询的数据,一共查询了46万行数据。
然后这里的key值代表select语句在执行的时候,是否使用了索引,因为这个key值为空,所以代表这个select语句在执行的时候,没有使用索引。
创建一个索引。
如上图所示,这就表示的是在这个test1表的price价格字段建立了一个索引。
如上图所示,此时在执行这个select语句调出这个表中商品价格等于5000的商品的时候,一个查询了39行数据,并且在这个key下显示使用了price_key这个索引。
如上图所示,这就是数据库中关于查询操作的优化。
如果SQL语句用不到索引,这时这个索引就是没有的。
比如在执行同一个查询操作的时候,一个人写的查询语句用到了索引信息,一个人写的查询语句没有用到索引,这时两个人的工作效率差了不止一倍。
为了避免这种情况【写的SQL语句不合适,没有用到索引信息】
1.数据库内部做数据类型转换的时候,就用不到索引。
如上图所示,当我们用引号将整形数据引起来的时候,这时的整形数据就成为了字符型数据。
但是数据库会帮助我们将这个字符型数据转换成int类型的数据,但是这时即使这个表中有索引也用不到。
2.当做不等值【大于号,小于号】判断的时候不会用到索引,
如上图所示,这是当我们在数据库中进行不等值判断的时候,不会用到索引。
3.写in(),or的时候可能不会触发使用索引
4.当使用模糊查询like的时候,可能也不会触发索引。
这个需要了解。