首页 > 数据库 >mysql 索引

mysql 索引

时间:2024-09-03 12:17:35浏览次数:5  
标签:classId name -- age 索引 student mysql

最左匹配原则

CREATE INDEX idx_age_classid_name ON student(age,classId,name);

show index from student;
-- 1【索引部分生效】
-- 索引部分生效age  key=idx_age_classid_name,key_len=5(int4字节+额外1字节标记空null)
EXPLAIN SELECT SQL_NO_CACHE * FROM student WHERE student.age=30 AND student.name = 'abcd';

-- 2【跳过复合索引列,索引失效】
-- 索引不生效 跳过复合索引列  key=null,key_len=null
EXPLAIN SELECT SQL_NO_CACHE * FROM student WHERE student.classId=1 AND student.name = 'abcd';

-- 3【符合索引前边部分(挨着)】
-- 索引生效age+classId  key=idx_age_classid_name,key_len=10 (2个int4字节+2个额外1字节标记空null)
EXPLAIN SELECT SQL_NO_CACHE * FROM student WHERE student.age=30 AND student.classId = 1;
-- 和最左索引列挨着的索引列,两个索引列先后顺序可随意 key_len=10
EXPLAIN SELECT SQL_NO_CACHE * FROM student WHERE student.classId = 1 AND student.age=30;

-- 4【覆盖符合索引所有列】
-- 索引生效 key_len=73 (age+classId=2个int4字节+2个额外1字节标记空null=10;name=63(CHARSET=utf8(3字节) VARCHAR(20):20*3+1个额外1字节标记空null+动态列类型+还需要再加 2 bytes))
-- 符合索引所有列都用到,和索引列顺序无关
EXPLAIN SELECT SQL_NO_CACHE * FROM student WHERE student.classId=4 AND student.age=30 AND student.name = 'abcd';
EXPLAIN SELECT SQL_NO_CACHE * FROM student WHERE student.age=30 AND student.classId=4 AND student.name = 'abcd';
EXPLAIN SELECT SQL_NO_CACHE * FROM student WHERE student.name = 'abcd' AND student.classId=4 AND student.age=30;

标签:classId,name,--,age,索引,student,mysql
From: https://www.cnblogs.com/goodluckxiaotuanzi/p/18394282

相关文章

  • 程序员开发必备MySQL数据可视化视图工具Navicat Premium Lite 精简版安装教程
    程序员开发必备MySQL数据可视化视图工具NavicatPremiumLite精简版使用:https://blog.csdn.net/jky_yihuangxing/article/details/141854667文章目录1.软件官方下载地址2.软件介绍3.下载安装步骤1.软件官方下载地址https://www.navicat.com.cn/products#navi......
  • 20240903_110652 mysql 填空题 dml
    全列添加,往student表(id,name,age)添加数据,id自增长,name值为'tom',age值为6insertintostudentvalues(null,'tom',6)限定列的添加,往student表(id,name,age)添加数据,不管id,name值为'tom',age值为6insertintostudent(name,age)values('tom',6)添加多条数据,往stude......
  • Java项目: 基于SpringBoot+mysql房屋租赁系统(含源码+数据库+答辩PPT+毕业论文)
    一、项目简介本项目是一套基于SpringBoot+mysql房屋租赁系统包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。项目都经过严格调试,eclipse或者idea确保可以运行!该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值二、技术实......
  • Vue3+NestJS+Vite4+TS4+Mysql8+Nginx全栈开发企业级管理后台
    vite打包快的原因:冷启动1.esbuild构建依赖,go语言编写多线程打包。2.原生的esm方式提供源码,浏览器分担了一部分工作。HMR热更新1.缓存机制,利用浏览器http头部,源码模块请求根据304协商缓存和依赖模块请求通过强缓存(cache-control:max-age=315360000,public,immutable)只是模块......
  • Python-openpyxl读取Excel中数据写入MySQL的表中
     Python代码:importpymysqlfromopenpyxlimportload_workbookdefinsert_excel_data_to_mysql(in_filename,in_host,in_user,in_password,in_database,in_table):#连接数据库mydb=pymysql.connect(host=in_host,#数据库主机地址......
  • PHP批量修改MySQL数据表字符集为utf8mb4/utf8mb4_unicode_ci
    编码大全可参考我之前的文章:快速理解ASCII、GBK、Unicode、UTF-8、ANSI批量修改注意这是DDL操作,操作过程会锁表(元数据锁),平均1秒能够转码3张表(数据量不大)。亲测操作过后没有数据异常,推荐执行前备份。//接手一些老项目,需要修改编码。$host='';$db='';$user='';$pa......
  • MySQL 允许你在 JSON 数据上创建索引
    MySQL允许你在JSON数据上创建索引测试用例CREATETABLE`student`(`id`intNOTNULLAUTO_INCREMENT,`name`varchar(255)DEFAULTNULL,`age`intDEFAULTNULL,`courses`jsonDEFAULTNULL,`address`jsonDEFAULTNULL,PRIMARYKEY(`id`))ENGINE=Inn......
  • mysql创建数据库和表
    MySQL数据库与表的创建:结合具体案例分析MySQL是一种开源的关系型数据库管理系统(RDBMS),广泛应用于各种数据密集型的应用程序中。在数据库设计中,创建数据库和表是基础且关键的一步。本文将结合具体案例,详细分析如何在MySQL中创建数据库和表。一、创建数据库在MySQL中,创建数据库......
  • MySQL外键使用详解
    一、基本概念1、MySQL中“键”和“索引”的定义相同,所以外键和主键一样也是索引的一种。不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引。用于外键关系的字段必须在所有的参照表中进行明确地索引,InnoDB不能自动地创建索引。2、外键可以是一对......
  • MySQL视图(view)
    一、基本概念视图是一个虚拟表,是sql的查询结果,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成。视图的数据变化会影响到基表,基表的数据变化也会影响到视图[insertupdatedelete];创建视图需要createview权限,并且对于查询涉及的......