码迷,mamicode.com
首页 > 数据库 > 详细

SQLyog基本操作(九)- 索引分类、测试

时间:2021-07-05 16:42:08      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:xpl   图片   signed   block   可重复   explain   ODB   cat   info   

7.1 索引的分类

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

  • 主键索引(PRIMARY KEY)

    • 唯一的标识,主键不可重复,只能有一个列作为主键

  • 唯一索引(UNIQUE KEY)

    • 避免重读的列出现,唯一索引可以重复,多个列都可以标识为唯一索引

  • 常规索引(KEY/INDEX)

    • 默认的,index或key关键字来设置

  • 全文索引(FULLTEXT)

    • 在特定的数据库引擎下采用,之前只有MYISAM有

    • 快速定位数据

基础语法

 -- 索引的使用
 -- 1、在创建表的时候给字段增加索引
 -- 2、表创建完毕后,增加索引
 ?
 -- 显示所有的索引信息
 SHOW INDEX FROM `student`
 ?
 -- 增加一个全文索引:格式:索引类型 索引名(列名),主键索引只要有所英明就行了
 ALTER TABLE `school`.`student` ADD FULLTEXT INDEX `StudentName`(`StudentName`)
 ?
 -- EXPLAIN分析sql执行的情况
 EXPLAIN SELECT * FROM `student`; -- 非全文索引
 EXPLAIN SELECT * FROM `student` WHERE MATCH(`StudentName`) AGAINST(‘郭‘)

查看索引可以得到的结果

技术图片

 

7.2 索引测试

创建app_user表

 CREATE TABLE `app_user` (
   `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
   `name` VARCHAR(50) DEFAULT ‘‘ COMMENT ‘用户昵称‘,
   `email` VARCHAR(50) NOT NULL COMMENT ‘用户邮箱‘,
   `phone` VARCHAR(20) DEFAULT ‘‘ COMMENT ‘手机号‘,
   `gender` TINYINT(4) UNSIGNED DEFAULT ‘0‘ COMMENT ‘性别(0:男;1:女)‘,
   `password` VARCHAR(100) NOT NULL COMMENT ‘密码‘,
   `age` TINYINT(4) DEFAULT ‘0‘ COMMENT ‘年龄‘,
   `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=utf8mb4 COMMENT=‘app用户表‘
 ?

插入100万条数据

 -- 插入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`,`email`,`phone`,`gender`,`password`,`age`)
     VALUES(CONCAT(‘用户‘,i),‘20210703@qq.com‘,
    CONCAT(‘18‘,FLOOR(RAND()*((999999999-100000000)+100000000))),
    FLOOR(RAND()*2),UUID(),FLOOR(RAND()*100));
     SET i=i+1;
   END WHILE;
   RETURN i;
 END;
 SELECT mock_data() -- 执行此函数 生成一百万条数据

运行时间:

技术图片

输出结果:

技术图片

注意: 删除mock_data函数

DROP FUNCTION mock_data

通过查看数据所用时间来体现索引的高效:

1.SELECT * FROM app_user WHERE name=‘用户9999‘;

技术图片

技术图片

2.EXPLAIN SELECT * FROM app_user WHERE name=‘用户9999‘

此时需要查询rows为993623

技术图片

技术图片

3.SELECT * FROM student

技术图片

4.创建索引后进行查询

 -- id _表名_字段名
 -- 3、CREATE INDEX 索引名 ON 表(字段)
 CREATE INDEX id_app_user_name ON `app_user`(`name`)

4.1 SELECT * FROM app_user WHERE name=‘用户9999‘;

技术图片

发现添加索引后,查询时间变短

4.2 EXPLAIN SELECT * FROM app_user WHERE name=‘用户9999‘

添加索引后,查询rows为1,极大的提高了效率

技术图片

技术图片

总结:索引在小数据量的时候,用处不大,但是在大数据的时候,区别十分明显。

SQLyog基本操作(九)- 索引分类、测试

标签:xpl   图片   signed   block   可重复   explain   ODB   cat   info   

原文地址:https://www.cnblogs.com/XiaoCui-blog/p/14964314.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!