在MySQL中,使用in函数,会不会触发索引

在MySQL中,使用in函数,会不会触发索引,我们实践一下就知道了。
前提:Windows10、MySQL5.6.51、可视化工具navicat

情况一

在这里插入图片描述

情况二

在这里插入图片描述

情况三

在这里插入图片描述
对比以上三种情况,我们发现:一、二使用了索引,三没有走索引,而是全表扫描。
结论

  1. 当in()种的数据很大时,不走索引
  2. 当查询的列是char类型没有加引号,mysql优化器会自动给填充引号,同时也会导致索引失效
  3. 当in()中存在子查询、格式化函数等同样也会使索引失效!

扩展知识点:

type:连接类型,有以下几种值:
system:表只有一行记录,相当于系统表
const:通过索引一次就找到,只匹配一行数据
eq_ref: 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配
ref:非唯一性索引扫描,返回匹配某个单独值的所有行用于=、<、> 操作符带索引的列
range:只检索给定范围的行,使用一个索引来选择行一般使用 between、<、>
index:只遍历索引树
ALL:全表扫描,性能最差

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,那我就给你简单介绍一下如何在 MySQL 创建学生教务系统所需的索引、视图、函数、存储过程和触发器。 1. 索引MySQL ,可以通过 CREATE INDEX 语句来创建索引。例如,如果你想为学生表的学号字段创建一个唯一索引,可以使用以下命令: ``` CREATE UNIQUE INDEX idx_student_id ON student (id); ``` 2. 视图 视图是一种虚拟表,它是由一个或多个表的查询结果组成的。在 MySQL ,可以通过 CREATE VIEW 语句来创建视图。例如,如果你想创建一个包含学生姓名和所选课程的视图,可以使用以下命令: ``` CREATE VIEW vw_student_course AS SELECT student.name, course.name FROM student INNER JOIN course_selection ON student.id = course_selection.student_id INNER JOIN course ON course_selection.course_id = course.id; ``` 3. 函数 MySQL 支持许多内置函数,例如 COUNT、SUM、AVG 等。如果你需要自定义函数,可以使用 CREATE FUNCTION 语句来创建。例如,如果你想创建一个函数,返回指定学生的选课数量,可以使用以下命令: ``` CREATE FUNCTION get_course_count(student_id INT) RETURNS INT BEGIN DECLARE count INT; SELECT COUNT(*) INTO count FROM course_selection WHERE student_id = student_id; RETURN count; END; ``` 4. 存储过程 存储过程是一组预编译的 SQL 语句,它们可以在一起执行。在 MySQL ,可以使用 CREATE PROCEDURE 语句来创建存储过程。例如,如果你想创建一个存储过程,用于删除指定学生的所有选课记录,可以使用以下命令: ``` CREATE PROCEDURE delete_student_courses(student_id INT) BEGIN DELETE FROM course_selection WHERE student_id = student_id; END; ``` 5. 触发触发器是一种特殊的存储过程,它们在表上的 INSERT、UPDATE 或 DELETE 操作发生时触发。在 MySQL ,可以使用 CREATE TRIGGER 语句来创建触发器。例如,如果你想创建一个触发器,用于在学生表上执行 DELETE 操作时,同时删除该学生的所有选课记录,可以使用以下命令: ``` CREATE TRIGGER delete_student_courses_trigger AFTER DELETE ON student FOR EACH ROW BEGIN DELETE FROM course_selection WHERE student_id = OLD.id; END; ``` 以上就是在 MySQL 创建学生教务系统所需的索引、视图、函数、存储过程和触发器的简单介绍。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tung.D.Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值