mysql前缀索引语句_mysql 前缀索引

mysql前缀索引语句_mysql 前缀索引联合索引概念联合索引又叫复合索引,即一个覆盖表中两列或者以上的索引,例如:index_name(columna,columnb)1创建方式执行altertable语句时创建altertabletable_nameaddindexindex_name(column_list)1index_name是创建的联合索引的名字,可以没有,没有的话系统会根据该索引包含的第一列来赋名称;tabl…

大家好,又见面了,我是你们的朋友全栈君。

联合索引

概念

联合索引又叫复合索引,即一个覆盖表中两列或者以上的索引,例如:

index_name(column a,column b)

1

创建方式

执行alter table语句时创建

alter table table_name add index index_name(column_list)

1

index_name是创建的联合索引的名字,可以没有,没有的话系统会根据该索引包含的第一列来赋名称;table_name是要创建该索引的表名;column_list为该索引所包含的表的字段名。

执行create index语句时创建

create index index_name on table_name(column_list)

1

此种情况是在表已经创建好的情况下,再来创建复合索引。index_name和column_list同上;table_name是要创建索引的表名。

例子

create table stu

(

id int,

name varchar(10),

age int,

primary key(id)

);

ALTER TABLE stu ADD INDEX LianHeIndex (name,age);

或者

create index LianHeIndex on stu(name,age);

1

2

3

4

5

6

7

8

9

10

执行上面的语句后在表stu中就创建好了一个名叫LianHeIndex联合索引,在使用联合索引的时候,我们遵守一个最左原则,即INDEX LianHeIndex (name,age)支持name|name age组合查询,而不支持age查询;换句话说,在执行

select * from stu where name=?

1

或者

select * from stu where name=? and age=?

1

时联合索引才会有效,如果执行

select * from stu where age=?

1

则联合索引不会生效。

如果我们是在name和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在name、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(name, age)的复合索引,那么其实相当于创建了(name)、(name,age)两个索引,这被称为最佳左前缀特性。

因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。

注意事项

只要列中包含有NULL值都将不会被包含在索引中

复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的,所以我们在数据库设计时尽可能不要让字段的默认值为NULL。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142246.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • threadlocal底层实现_ioc的底层实现原理

    threadlocal底层实现_ioc的底层实现原理ThreadLocal作用:提供线程内的局部变量,不同的线程之间不会相互干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂性。package com.mupack;public class App{ private String content; public void setContent(String content) { this.content = content; } public Stri

    2022年8月8日
    3
  • 抽象类是否可继承实体类

    抽象类是否可继承实体类 题目如下:问:  抽象类是否可继承实体类 (concrete class)答: 抽象类是可以继承实体类,但前提是实体类必须有明确的构造函数 ——————-答案很明确,可以继承。其实从Object就是个实体类,java的API文档里,每个抽象类的条目里都明确写着直接或间接继承自Object,所以这点是没有疑问的。关键在于这答案里所说的“前提是实体类必…

    2022年6月13日
    58
  • 接口测试-Mock测试方法

    接口测试-Mock测试方法一、关于Mock测试1、什么是Mock测试?Mock测试就是在测试过程中,对于某些不容易构造(如HttpServletRequest必须在Servlet容器中才能构造出来)或者不容易获取的比较复杂的对象(如JDBC中的ResultSet对象),用一个虚拟的对象(Mock对象)来创建以便测试的测试方法。2、为什么要进行Mock测试?Mock是为了解决不同的单元之…

    2022年6月20日
    27
  • Maven(三):将web项目的war包热部署到远程Tomcat服务器

    Maven(三):将web项目的war包热部署到远程Tomcat服务器

    2021年9月26日
    74
  • Python GUI[通俗易懂]

    Python GUI[通俗易懂]1.flexxFlexx是一个纯Python工具包,用来创建图形化界面应用程序。其使用Web技术进行界面的渲染。你可以用Flexx来创建桌面应用,同时也可以导出一个应用到独立的HTML文档

    2022年7月5日
    25
  • Java基础,if,Integer最大值最小值,负数移位[通俗易懂]

    Java基础,if,Integer最大值最小值,负数移位[通俗易懂]如下:inta=2;if(a){//错误的,Incompatibletype,requiredboolean}if(!a){//错误的,Operate!cannotbeappliedtoint}System.out.println(Integer…

    2025年10月1日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号