mysql 2 -- 索引、mysql用户管理、备份

本文详细介绍了MySQL中的索引类型,包括主键索引、唯一索引和普通索引,强调了唯一索引在字段唯一性越强时效率越高。创建索引的三种方法以及如何通过`EXPLAIN`分析SQL查询性能。还提到了全文索引和如何通过Navicat进行用户管理和MySQL备份。最后,通过实例展示了创建100万条数据并测试索引对查询速度的影响。
摘要由CSDN通过智能技术生成

mysql官方对 索引的定义为: 索引(index)是帮助mysql高效获取数据的数据结构(这里是B+树)。

所以索引的本质:索引是数据结构

**
**

索引

索引原理

image.png

索引的分类

在一个表中,主键索引只能有一个,唯一索引可以有多个

  • 主键索引(Primary key)

    • 唯一的标识,主键不可重复,只能有一个列作为主键
  • 唯一索引(unique key)

    • 避免重复的列出现。(该列的每项内容必须唯一),但是多个列都可以是标识为唯一索引
      • 这么理解这句话:这个列里的每个框里的内容在该列都是唯一的。 但是很多个列都可以达到这种状态。即很多列都可以是唯一索引。 这个唯一针对的是列的内容。而不是列本身。
  • 常规索引(key/index)

    • 默认的。 用index、key等关键字来设置
  • 全文索引(FullText)

    • 在特定的数据库引擎下才有,MyISAM一开始没有,现在好像也有了
    • 快速定位数据

image.png

如果是唯一索引,那么字段唯一性越强,效率越高

索引的创建:3种办法

  1. 在创建表的时候给字段增加索引(如下面的 primary key主键索引,unique key唯一索引,key普通索引)
  2. 用 alter 创建索引
  3. 用 create 创建索引
drop table if exists `student`;
create table `student`(
    `studentno` int(4) not null ,
    `studentname` varchar(20) default null ,
    `email` varchar (50) not null ,
    `identitycard` varchar(18) default null ,
    primary key (`studentno`),
    unique key `identitycard`(`identitycard`),
    key `email` (`email`)
)engine=myisam default charset=utf8;
alter table itheima.student add fulltext index studentname(studentname)

image.png

显示所有的索引信息

show index from 表名

索引优化测试:创建100万条之后,现在进行查询。看下结果

不建索引的时候,在100万条里查询数据
select * from app_user where name='用户9999'

image.pngimage.png

分析此sql

explain select * from app_user where name='用户9999'

image.png

此时添加索引,再次查询
-- create index 索引名 on 表名(字段名)
create index index_app_user_name on app_user(`name`)
-- 索引名的命名规则:  索引名_表名_字段名

再次查询,0.01s

分析sql:直接就找到了

image.png

创建索引的原则

image.pngimage.png

索引失效

image.pngimage.png

一般这时候,就可以用union,不用 or。 union不会导致索引失效

image.pngimage.pngimage.png

用户管理、mysql备份

这里涉及到引用,面试不问。暂时只简单介绍

用户管理和mysql备份都可以直接通过navicat来操作。也都有相应的命令操作。

后记

sql编程:创建100万条数据(不必记忆)

CREATE TABLE `app_user` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT '',
`eamil` varchar(50) NOT NULL,
`phone` varchar(20) DEFAULT '',
`gender` tinyint(4) unsigned DEFAULT '0',
`password` varchar(100) NOT NULL DEFAULT '',
`age` tinyint(4) DEFAULT NULL,
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
-- 插入100万数据.
DELIMITER $$
-- 写函数之前必须要写,标志
CREATE FUNCTION mock_data ()
RETURNS INT
BEGIN
    DECLARE num INT DEFAULT 1000000;
    DECLARE i INT DEFAULT 0;
    WHILE i<num DO
        INSERT INTO `app_user`(`name`,`eamil`,`phone`,`gender`)VALUES(CONCAT('用户',i),'19224305@qq.com','123456789',FLOOR(RAND()*2));
        SET i=i+1;
    END WHILE;
    RETURN i;
END;

SELECT mock_data() -- 执行此函数 生成一百万条数据
gender`)VALUES(CONCAT('用户',i),'19224305@qq.com','123456789',FLOOR(RAND()*2));
        SET i=i+1;
    END WHILE;
    RETURN i;
END;

SELECT mock_data() -- 执行此函数 生成一百万条数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值