`

Mysql索引基本操作详解

阅读更多

请大家关注 我的新家:www.taoyongpan.xin/2017/12/05/sql001/

大学生眼中的网站

我也是个大三的学生,绝对没有贬低的意思。

  当我们知道自己被计算机学院录取的时候,我们都怀着好奇与忐忑的心情,开始了我们的大学;好奇的是:我们平常生活中使用的这些网站和APP都是怎么做出来的呢,我以后也是干这个的吗;忐忑的是:wco我平时就会打游戏和看视频,那些玩意我能学会吗,好起来逼格都好高啊。当我们刚开始接触代码时候的那种油然而生的装逼之心 ,忍不住发了个说说,告诉身边的人,我也是电视里那种用代码的人了;经过了一年的沉浮,我们大部分人都已经是开发小能手了,我们可以各种徒手做网站、APP,内心充满了雄心壮志,但是我们的网站的效率是怎样的的呢,有没有数据过万,加载速度就明显降低呢,我们应该怎么去提高我们的查询效率呢?缓存还是索引,这是一个问题。
  使用缓存是一种方法,现在比较火的有Redis和Memcached,但是当处理一些动态数据的时候,我们的缓存方法肯定会出现问题,我会在另一篇博客中重点讲解一下;本篇主要是用的是数据库索引;

随机生成一百万数据

  我们使用数据库索引是为了处理大数据问题的,可是我们 没有数据啊,这可真是难倒了一堆好汉;但是大哥们,我们要注意的时候,计算机多少数据不可以自动生成,他可是我们的傻兄弟啊,那咱们就来教一下这个傻傻的小兄弟,先生成个一百万的数据:

创建一个简单的用户表

CREATE TABLE `t_user_memory` (  
    `id` INT (11) NOT NULL AUTO_INCREMENT,  
    `username` VARCHAR(50) NOT NULL DDEFAULT '',  
    `password` VARCHAR(50) NOT NULL DDEFAULT '',  
    PRIMARY KEY (`id`),  
) ENGINE = MEMORY AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8 ;

 依次执行下面的操作:

1、随机产生长度为n的字符串的函数:

CREATE FUNCTION `rand_str`(n INT) RETURNS varchar(255) CHARSET latin1  
BEGIN   
DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';   
DECLARE return_str varchar(255) DEFAULT '' ;  
DECLARE i INT DEFAULT 0;   
WHILE i < n DO   
SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*62 ),1));   
SET i = i +1;   
END WHILE;   
RETURN return_str;   
END  

 2、向数据库中添加n条数据的函数:

CREATE  PROCEDURE `add_user`(IN n int)  
BEGIN    
  DECLARE i INT DEFAULT 1;  
    WHILE (i <= n ) DO  
      INSERT into t_user_memory (username,password) VALUES (rand_str(20),rand_str(20));  
            set i=i+1;  
    END WHILE;  
END  

 3、调用插入函数,并插入一百万的数据:

CALL add_user(1000000) 

 简单暴力,一百万数据添加完毕 ,我们可以根据自己的需要改变插入条数的大小;

创建数据库索引

普通索引

这是最基本的索引类型,而且它没有唯一性之类的限制;

1、创建

CREATE INDEX indexId ON t_user_memory(id)

 2、索引的删除

DROP INDEX indexId ON  t_user_memory

 

唯一性索引

这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。

1、创建

CREATE UNIQUE INDEX indexId ON t_user_memory(id);

 2、删除和普通索引一样

主键索引

它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引,也就是我们的主键。

单列索引&组合索引

单列索引

依然使用上面的例子,当我们查找一个username = “Taoyongpan”的用户的时候,我们查处了10条,但是每条的密码不一样,我们查询的时候很快的查出 这十条数据,把这十条数据放到一个中间结果集上面,然后再对比密码一一排除,我们在密码上加索引也是同样的原理;

组合索引

当我们把username和password放到一个索引里面的时候就会直接查找到我们所需要的那一条数据,当数据量非常大的时候,会大大提高我们的查找速度,这就是组合索引;

1、创建

ALTER TABLE t_user_memory ADD INDEX indexUser (username,password)

 2、删除操作同上

数据库索引的利与弊

1、建立索引的列可以保证行的唯一性,生成唯一的rowId
2、建立索引可以有效缩短数据的检索时间
3、建立索引可以加快表与表之间的连接
4、为用来排序或者是分组的字段添加索引可以加快分组和排序顺序

1、创建索引和维护索引需要时间成本,这个成本随着数据量的增加而加大
2、创建索引和维护索引需要空间成本,每一条索引都要占据数据库的物理存储空间,数据量越大,占用空间也越大(数据表占据的是数据库的数据空间)
3、虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。

下篇预告

下一篇我们一起来学习一下,索引的原理是怎么的,为什么可以提高查询效率呢,等问题,我们下一篇再见。

分享到:
评论

相关推荐

    MySQL Innodb 索引原理详解

    ### MySQL Innodb 索引原理详解 #### 1. 各种树形结构 在深入探讨MySQL Innodb索引之前,我们先了解几种基本的树形数据结构,包括二叉搜索树、B树、B+树以及B*树。 ##### 1.1 搜索二叉树(Binary Search Tree) ...

    mysql索引知识点详解

    mysql索引知识点详解

    mysql索引数据结构详解

    MySQL 索引数据结构详解 MySQL 索引是一种特殊的数据结构,它可以帮助快速定位和检索数据。索引的主要目的便是降低树的高度,从而提高查询效率。下面我们将详细介绍 MySQL 索引的数据结构和工作原理。 索引的存储 ...

    mysql数据库以及索引详解.pptx

    ### MySQL数据库及索引详解 #### 一、MySQL简介与数据库发展 MySQL是一款非常流行的开源关系型数据库管理系统,由瑞典MySQL AB公司开发。它以其高性能、稳定性和易用性著称,广泛应用于Web应用程序和企业级系统中...

    MySQL-数据库-索引详解

    MySQL 数据库索引详解 MySQL 数据库索引是一种特殊的数据库结构,可以快速查询数据库表中特定记录。索引是提高数据库性能的重要方式。 索引的概念 ---------------- 索引是表中数据的目录。如果使用索引,则扫描...

    MySql索引详解,索引可以大大提高MySql的检索速度

    打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到...

    mysql 索引失效详解

    MySQL 索引失效详解 MySQL 索引是一种加快数据检索速度的数据库对象。索引可以大幅度提高查询效率,但是如果不正确使用索引,可能会导致索引失效。索引失效是指MySQL 不能使用索引来加速查询,导致查询效率下降。 ...

    MySQL索引操作命令详解

    MySQL索引操作命令详解 MySQL索引操作命令详解是指MySQL中对索引的各种操作命令的详细介绍...MySQL索引操作命令详解是MySQL数据库性能优化和索引管理的基础,掌握这些命令可以帮助开发者更好地管理和优化MySQL数据库。

    MySQL 索引最佳实践

    本文将深入探讨MySQL索引的最佳实践,旨在为开发者和数据库管理员提供实用指南。 ### 理解索引的重要性 索引的存在主要是为了加速数据库中的数据访问速度。在没有索引的情况下,数据库必须遍历整个表来查找特定的...

    mysql 索引与执行计划

    ### MySQL 索引与执行计划 #### 一、索引与执行计划 ##### 1.1 索引入门 在深入探讨之前,我们首先需要理解什么是索引以及其重要性。 ###### 1.1.1 索引是什么 索引(Index)在MySQL中是一种帮助数据库高效获取...

    MySQL索引最佳实践

    #### 二、MySQL索引类型详解 ##### 1. B-Tree索引 - **定义**:B-Tree(平衡树)是最常见的索引类型,在大多数情况下使用的索引都属于此类。B-Tree能够支持范围查找、前缀查找以及等值查找等多种操作。 - **特点**...

    Mysql数据库索引创建、索引删除、索引失效场景详解

    索引的失效场景包括:更新或删除索引列,使用不带索引的全表扫描操作,使用`SELECT *`而不是明确列出索引列,使用`NOT IN`、`&lt;&gt; ALL()`或`NOT EXISTS`等操作,以及在`WHERE`子句中使用了函数或表达式。此外,索引也...

    快速上手MySQL图形化操作详解

    MySQL图形化操作详解 MySQL是一种流行的开源关系型数据库管理系统,以其高效、稳定和易于使用而闻名。本篇文章将详细介绍如何快速上手MySQL的图形化操作。 首先,我们需要下载MySQL的相关软件。MySQL的官方主页是...

    mysql索引和锁机制ppt介绍

    ### MySQL索引和锁机制详解 #### 一、索引基础 **索引定义:** 索引是MySQL中用于提高查询效率的一种数据结构。通过索引可以在数据表中快速定位到所需的数据行,大大减少不必要的全表扫描。 **索引的重要性:** 1....

    mysql索引与树结构(索引简介、索引用法详解、B-Tree索引结构、索引导致的问题).docx

    - **修改索引**: MySQL不直接支持修改索引,需先删除再重建。 - **查询索引** - **基础命令**: `EXPLAIN SELECT * FROM table_name WHERE condition;` - **参数解释**: - **id**: 指示查询的执行顺序。 - **...

    MySQL索引分析和优化.pdf

    ### MySQL索引分析与优化详解 #### 一、引言 在现代数据库管理系统中,索引扮演着极其重要的角色。合理的索引设计不仅能显著提升查询性能,还能优化数据的存储结构,进而提高整个系统的响应速度。本文将深入探讨...

    怎样正确创建MySQL索引的方法详解

    索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低...Mysql索引主要有两种结构:B+Tree索引和Hash索引。我们平常所说的索引,如果没有特别指明,一般都是指B树结构组织的索引(B+Tree索引)。索引如图所示:

    MySQL索引原理

    ### MySQL索引原理详解 #### 一、索引的基本概念 **索引**是帮助MySQL高效获取数据的数据结构。在数据库中,索引扮演着极其重要的角色,它能够显著提高数据检索的速度,尤其是在处理大规模数据集时尤为重要。索引...

Global site tag (gtag.js) - Google Analytics