索引的用途(索引使用的基本原则有哪些)

lxf2023-11-27 11:10:01

mysql教程专栏的例子解释了MySQL索引的使用。

更多相关免费学习推荐:mysql教程(视频)

使用MySQL索引的例子

  • I .慢速查询日志
  • 2.查询分析器-解释
  • 三。索引的基本用途
  • 四。复合指标
  • 动词 (verb的缩写)覆盖指数
  • I .慢速查询日志//查看是否开启慢查询日志 mysql> show variables like '%slow%';//临时开启慢查询日志 mysql> set global slow_query_log=ON;//查看是否开启慢查询日志 mysql> show variables like '%slow%';//查询超过多少时间就可以记录,上面是如果超过10秒就要记录 mysql> show variables like '%long%';//改成一秒,如果超过一秒就写到慢日志里面去(一般一秒是最好的)mysql> set long_query_time=1;//查看日记存储方式,默认FILE mysql> show variables like '%log_output%';// 慢查询日志文件所在位置 mysql> show variables like '%datadir%';//响应时间是3秒,超过了原先设定的一秒 mysql> select sleep(3);


    我们在文件夹里找的时候,发现它已经存放在慢查询日记里了。

    这部分讲解了如何通过慢日志找出 SQL,后面的部分会讲为什么慢以及如何能更快。

    2.查询分析器-解释

    函数:通过这个可以知道sql哪里慢了,哪里需要优化。

    列:我们创建一个雇员数据表

    create table employee( id int not null auto_increment primary key, name varchar(30) comment '姓名', sex varchar(1) comment '性别', salary int comment '薪资(元)', dept varchar(30) comment '部门');insert into employee(name, sex, salary, dept) values('张三', '男', 5500, '部门A');insert into employee(name, sex, salary, dept) values('李洁', '女', 4500, '部门C');insert into employee(name, sex, salary, dept) values('李小梅', '女', 4200, '部门A');insert into employee(name, sex, salary, dept) values('欧阳辉', '男', 7500, '部门C');insert into employee(name, sex, salary, dept) values('李芳', '女', 8500, '部门A');insert into employee(name, sex, salary, dept) values('张江', '男', 6800, '部门A');insert into employee(name, sex, salary, dept) values('李四', '男', 12000, '部门B');insert into employee(name, sex, salary, dept) values('王五', '男', 3500, '部门B');insert into employee(name, sex, salary, dept) values('马小龙', '男', 6000, '部门A');insert into employee(name, sex, salary, dept) values('龙五', '男', 8000, '部门B');insert into employee(name, sex, salary, dept) values('冯小芳', '女', 10000, '部门C');insert into employee(name, sex, salary, dept) values('马小花', '女', 4000, '部门B');insert into employee(name, sex, salary, dept) values('柳峰', '男', 8800, '部门A');//通过explain解读他,后面加一个\G便于阅读 mysql> explain select * from employee where name='柳峰'\G;//扫描快捷 mysql> explain select * from employee where id=13\G;

    效果:如下图,可以看出之前为什么这么慢了,四秒钟才反应过来。

    三。索引的基本用途

    mysql> show index from employee\G;//主键会默认建一个id索引

    创建索引可以提高效率。

    //查询分析 mysql> explain select * from employee where name='柳峰';//创建普通索引 mysql> create index idx_name on employee(name);//删除 mysql> drop index idx_name on employee;


    教师列表:

    如果用like搜索,效率不变,就看你怎么用了。

    四。复合指标

    //查的时候可以看到一个主键索引 mysql> show index from employee\G;

    它目前是一个全局扫描。

    select * from employee where name ='柳峰';//查询分析 explain select * from employee where name ='柳峰'\G;

    创建索引

    //创建索引 create index idx_name_salary_dept on employee(name,salary,dept);//查询分析 explain select * from employee where name ='柳峰'\G;

    请验证该名称可以被索引。

    // name和salary mysql> explain select * from employee where name ='柳峰' and salary=8800\G;//name和dept mysql> explain select * from employee where name ='柳峰' and dept='部门A'\G;

    你不能使用没有名字的索引。

    mysql> explain select * from employee where salary=8800;mysql> explain select * from employee where dept='部门A';

    动词 (verb的缩写)覆盖指数

    按照上面的步骤,我们可以看到四个索引,第一个是主键索引,其次是复合索引 name _ salary _ dept。

    mysql> show index from employee;


    如何触发

    我们使用id作为查询数据。

    mysql> select * from employee;mysql> select * from employee where id =11;

    仅检查id

    mysql> explain select id from employee employee where id=11\G;mysql> explain select id from employee\G;//查name,salary mysql> explain select name,salary from employee;//查name,salary,dept mysql> explain select name,salary,dept from employee;//因为没有sxe条件,所以只能做全部扫描type为null mysql> explain select name,sex,salary,dept from employee;

    以上是一个例子来介绍MySQL索引的使用细节。更多信息请关注AdminJS.cn其他相关文章!

    adminjs.cn是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 Adminjs.cn还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 在Adminjs.cn中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!