面试又给我问到MySQL索引,最全的一次整理

面试又给我问到MySQL索引,最全的一次整理

大家好,又见面了,我是全栈君。

前一阵子,又跑出去搞了一场面试,心态算是崩了,关于MySQL索引的原理及使用被面试官怼的体无完肤,立志要总结一番,然后一直没有时间(其实是懒……),准备好了吗?

面试又给我问到MySQL索引,最全的一次整理

一、MySQL中索引的语法

创建索引

在创建表的时候添加索引

CREATE TABLE mytable(  
    ID INT NOT NULL,   
    username VARCHAR(16) NOT NULL,  
    INDEX [indexName] (username(length))  
);

在创建表以后添加索引

ALTER TABLE my_table ADD [UNIQUE] INDEX index_name(column_name);
或者
CREATE INDEX index_name ON my_table(column_name);

注意:

1、索引需要占用磁盘空间,因此在创建索引时要考虑到磁盘空间是否足够

2、创建索引时需要对表加锁,因此实际操作中需要在业务空闲期间进行

根据索引查询

具体查询:
SELECT * FROM table_name WHERE column_1=column_2;(为column_1建立了索引)


或者模糊查询
SELECT * FROM table_name WHERE column_1 LIKE '%三'
SELECT * FROM table_name WHERE column_1 LIKE '三%'
SELECT * FROM table_name WHERE column_1 LIKE '%三%'


SELECT * FROM table_name WHERE column_1 LIKE '_好_'


如果要表示在字符串中既有A又有B,那么查询语句为:
SELECT * FROM table_name WHERE column_1 LIKE '%A%' AND column_1 LIKE '%B%';


SELECT * FROM table_name WHERE column_1 LIKE '[张李王]三';  //表示column_1中有匹配张三、李三、王三的都可以
SELECT * FROM table_name WHERE column_1 LIKE '[^张李王]三';  //表示column_1中有匹配除了张三、李三、王三的其他三都可以


//在模糊查询中,%表示任意0个或多个字符;_表示任意单个字符(有且仅有),通常用来限制字符串长度;[]表示其中的某一个字符;[^]表示除了其中的字符的所有字符


或者在全文索引中模糊查询
SELECT * FROM table_name WHERE MATCH(content) AGAINST('word1','word2',...);

删除索引

DROP INDEX my_index ON tablename;
或者
ALTER TABLE table_name DROP INDEX index_name;

查看表中的索引

SHOW INDEX FROM tablename

查看查询语句使用索引的情况

//explain 加查询语句
explain SELECT * FROM table_name WHERE column_1='123';

二、索引的优缺点

优势:可以快速检索,减少I/O次数,加快检索速度;根据索引分组和排序,可以加快分组和排序;

劣势:索引本身也是表,因此会占用存储空间,一般来说,索引表占用的空间的数据表的1.5倍;索引表的维护和创建需要时间成本,这个成本随着数据量增大而增大;构建索引会降低数据表的修改操作(删除,添加,修改)的效率,因为在修改数据表的同时还需要修改索引表;

三、索引的分类

常见的索引类型有:主键索引、唯一索引、普通索引、全文索引、组合索引

1、主键索引:即主索引,根据主键pk_clolum(length)建立索引,不允许重复,不允许空值

ALTER TABLE 'table_name' ADD PRIMARY KEY pk_index('col');

2、唯一索引:用来建立索引的列的值必须是唯一的,允许空值

ALTER TABLE 'table_name' ADD UNIQUE index_name('col');

3、普通索引:用表中的普通列构建的索引,没有任何限制

ALTER TABLE 'table_name' ADD INDEX index_name('col');

4、全文索引:用大文本对象的列构建的索引(下一部分会讲解)

ALTER TABLE 'table_name' ADD FULLTEXT INDEX ft_index('col');

5、组合索引:用多个列组合构建的索引,这多个列中的值不允许有空值

ALTER TABLE 'table_name' ADD INDEX index_name('col1','col2','col3');

*遵循“最左前缀”原则,把最常用作为检索或排序的列放在最左,依次递减,组合索引相当于建立了col1,col1col2,col1col2col3三个索引,而col2或者col3是不能使用索引的。

*在使用组合索引的时候可能因为列名长度过长而导致索引的key太大,导致效率降低,在允许的情况下,可以只取col1和col2的前几个字符作为索引

ALTER TABLE 'table_name' ADD INDEX index_name(col1(4),col2(3));

表示使用col1的前4个字符和col2的前3个字符作为索引

未完待续。。。

面试又给我问到MySQL索引,最全的一次整理

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

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

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


相关推荐

  • 简单Web应用框架设计

    简单Web应用框架设计

    2021年7月21日
    50
  • 实验室设备管理系统结构设计_实验室设备管理系统用例图

    实验室设备管理系统结构设计_实验室设备管理系统用例图源码在CSDN官方下载地址:https://download.csdn.net/download/qq_31293575/14808699

    2022年10月9日
    3
  • dosbox基础使用[通俗易懂]

    dosbox运行程序1、mountc:d:\masm64把d盘masm64的内容挂在到c盘中2、c:进入c盘3、masmname.asm编译name的asm文件,后面要敲回车masmname.asm;编译name的asm文件,后面不用敲回车4、linkname连接name的文件,后面要敲回车linkname;连接name的文件,后面不用敲回车5、name运行name的文件dubug程序1、挂载、进入c盘步骤和前面一样2、debugname.exe3、输入命令

    2022年4月15日
    142
  • 软件测试流程规范简介(不同公司流程规范不一样,仅供参考)「建议收藏」

    软件测试流程规范简介(不同公司流程规范不一样,仅供参考)「建议收藏」前言:整理了一下软件测试流程规范简洁,仅供参考!一、流程图概述二、测试启动阶段(需求分析)参与软件需求评审、技术评审,以测试的角度分析需求的可测性,可构思将来对测试进行的方法、原则等。更重要的是对不可测或难以测试性问题要及时与产品经理、项目经理、研发人员协调解决。全面了解需求,从用户角度考虑软件测试需要达到的验证的状态,即哪些功能需要重点测试,哪些则无需,以便将来制定测试计划。测试人员参与项目晨会,明确需求及任务完成进度及时间节点,研发人员需向测试人员提供外部应用及使用说明(如Redis、RMQ

    2022年6月5日
    37
  • IPv4与IPv6有什么不同,如何升级到IPv6

    自1981年JonPostel在RFC791中定义了IPv4到现在,IPv4在IP领域称王已有30余年,并一度成为IP的代名词,但是IPv4面临枯竭的危机,已经失去了实用价值。到1998年,互联网工程任务组(IETF)正式确立了IPv6后继协议,用于处理IPv4地址耗尽的长期预期问题,旨在取代IPv4并成为互联网的骨干。如今,网络世界正在缓慢地向IPv6标准过渡。根据据谷歌公班尼路统计,20…

    2022年4月9日
    54
  • 粒子群算法详解

    粒子群算法详解一.产生背景  ❃粒子群算法(particleswarmoptimization,PSO)由Kennedy和Eberhart在1995年提出,该算法对于Hepper的模拟鸟群(鱼群)的模型进行修正,以使粒子能够飞向解空间,并在最好解处降落,从而得到了粒子群优化算法。❃同遗传算法类似,也是一种基于群体叠代的,但并没有遗传算法用的交叉以及变异,而是粒子在解空间追随最优的粒子进行搜索。

    2022年6月10日
    34

发表回复

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

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