数据库 | 什么是视图?怎么使用?什么是索引?

news2024/9/21 16:42:29

目录

一、视图

1 、视图概念

2、为什么要使用视图

3 、性能问题

4 、定义视图

5、查看视图

6、删除视图

二、索引

1、引入索引的问题

2、索引是什么

3、索引为什么选择b+树


一、视图

1 、视图概念

        视图(View)是一种虚拟存在的表,对于使用视图的用户来说基本上是透明的。视图并不在数据库 中实际存放数据,它的数据来自定义视图时使用的基本表,并且是在使用视图时动态生成的。

2、为什么要使用视图

  1. 简化复杂的sql操作,在编写查询后,可以方便的重用它而不必知道它的查询细节。
  2. 重复使用该sql语句。
  3. 使用表的组成部分而不是整个表。
  4. 保护数据,可以给用户授予表的特定部分的访问权限而不是整个表。
  5. 更改数据格式和表示。

3 、性能问题

        因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需的任一个检索。如果是多个联结和过滤创建了复杂的视图或者嵌套了视图,可能会出现性能下降。

4 、定义视图

        定义视图建议以"_v"开头

        create view 视图名 as select语句;

5、查看视图

show tables; 默认会显示表和视图,但不能区分。

show full tables; 会显示表和视图的类型

6、删除视图

drop view viewname

二、索引

1、引入索引的问题

        在图书馆查找一本书的过程。 在一般的软件系统中,对数据库的操作还是以查询为主,当数据量较大时,优化查询是关键。

        那么可以给所有的列都加上索引嘛?(面试题)
        其实不可以的,因为每添加一个索引就需要重新添加一颗b+树,如果所有的列都添加索引会导致插入和查询的成本变高,因此只需要在经常使用的列添加索引就是最好的。

2、索引是什么

        索引是一种特殊的文件,它包含着对数据表里所有记录的引用指针。简单讲,就像一本书前面的目录, 能加快查询速度

        索引(在MySQL中也叫做“键(key)”) 是存储引擎用于快速找到记录的一种数据结构。这是索引的基本功能。
        索引对于良好的性能非常关键。尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要。在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但当数据量逐渐增大时,性能则会急剧下降。
        索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高几个数量级,“最优”的索引有时比一个“好的”索引性能要好两个数量级。创建一个真正“最优”的索引经常需要重写查询。

  • 索引是帮助mysql高效获取数据的数据结构
  • 索引存储在文件系统中
  • 索引的文件存储形式与存储引擎有关
  • 索引文件的结构

3、索引为什么选择b+树

        可以考虑作为索引的数据结构有如下几种:

  • hash表
  • 二叉树
  • b树
  • b+树(innoDB存储引擎上)使用b+树是因为b+树的高度稳定

        使用hash表的缺点:

  • hash存储需要将所有的数据文件添加到内存,浪费空间
  • 如果是等值查询,hash很快,但实际工作中范围查找更多,而不是等值查询,所以hash就不合适了

测试索引

1)在mysql中创建数据库 test_indexdb,操作如下:

create database test_indexdb;

2)在test_indexdb中创建表 test_index,操作如下:

use test_indexdb;

create table test_index(title varchar(20));

3)运行程序向表中插入1万条数据,都是字符串, c程序如下:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <mysql/mysql.h>
int main()
{
    MYSQL mysql_conn;//连接数据库句柄
    MYSQL * mysql = mysql_init(&mysql_conn);//初始化句柄mysql_conn
    if ( mysql == NULL )
    {
        printf("init err\n");
        exit(1);
    }
    //连接数据库                                                              
 mysql=mysql_real_connect(mysql,"localhost","root","Abc_111111","test_indexdb",3306,NUL
L,0);//连接本机localhost,用户为root,密码Abc_111111,数据库test_indexdb,端口3306
    if ( mysql == NULL )
    {
    printf("connect err\n");
    exit(1);
    }
    char sql_buff[128] = {0};
    for( int i = 0;i < 10000; i++ )
    {
        sprintf(sql_buff,"insert into test_index values('test-%d')",i);//待处理的执行语句存放入sql_buff内
        if ( mysql_query(mysql,sql_buff) != 0 )//执行sql语句mysql_query()
        {
            printf("insert into err:%s\n",mysql_error(mysql));//打印错误信息
            break;
        }
    }
    mysql_close(mysql);
}

4) 查询验证 开启运行时间监测:

set profiling=1;

查找一条数据 : test-9999

select * from test_index where title='test-9999';

查看执行的时间:

show profiles;

为表test_index的title列创建索引:

create index title_index on test_index(title(20));

执行查询语句后,再次查看执行时间

select * from t_index where title='test-9999';
show profiles;
mysql> show profiles;

删除索引

drop index t_index on test_index;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/459266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【DRF配置管理】如何建立完善的DRF自带接口docs文档

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 DRF应用和管理 【DRF配置管理】Django使用DRF框架 【DRF配置管理】如何实现JWT认证 【DRF配置管理】如何在视图函数配置参数(一) 【DRF配置管理】如何…

okcc呼叫问题的解决方法(建议收藏)

很多客户开始使用OKCC呼叫中心系统&#xff0c;运营经常遇到的问题是呼叫打不通&#xff0c;无话单&#xff0c;呼叫秒挂&#xff0c;语音提示"您没有使用业务的权限"等等异常情况&#xff0c;而且反馈线路正常&#xff0c;使用呼叫系统拨打就是呼不通。 OKCC系统…

史上最烂 spring aop 原理分析

盗引中篇spring aop spring aop: jdk 动态代理和 cglib 动态代理的特点、区别、使用方式、原理及各自对反射的优化、二者在 spring 中的统一、通知顺序、从 Aspect 到 Advisior、静态通知调用、动态通知调用。 版本 jdk&#xff1a;8spring&#xff1a;5.3.20spring boot&…

华为OD机试(20222023)真题目录 + 考点 + 复盘思路

大家好&#xff0c;我是哪吒。 本专栏包含了最新最全的华为OD机试真题&#xff0c;有详细的分析和Java代码解答。已帮助1000同学顺利通过OD机考&#xff0c;发现新题目&#xff0c;随时更新。 以下为华为OD机试真题题库。 1、华为OD机试真题&#xff08;Java&#xff09;&am…

创建型模式-原型模式

原型模式 介绍 用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象 结构 原型模式包含如下角色&#xff1a; 抽象原型类&#xff1a;规定了具体原型对象必须实现的的 clone() 方法。具体原型类&#xff1a;实现抽象原型类的 cl…

Linux文本处理三大利器Grep、AWK、Sed

写在前面 Linux三剑客是文本处理工具&#xff0c;它们可以帮助我们快速、高效地对文本进行处理。其中包括了grep、awk、以及sed这三个强大的命令行工具。 Linux 三剑客主要作用: grep&#xff0c;它可以根据正则表达式查找相关内容并打印对应的数据。awk&#xff0c;它可以根…

redhat8配置vsftpd服务

目录 一、匿名访问模式 1.1、ftp服务器端修改配置&#xff08;配置文件&#xff1a;/etc/vsftpd/vsftpd.conf&#xff09; 1.2 修改ftp目录的权限 1.3 设置selinux服务对ftp服务的访问规则策略为允许 1.4 防火墙添加ftp服务 1.5 测试 二、本地用户模式 2.1 服务端修改配…

6、什么是类型断言?

虽然 TypeScript 很强大&#xff0c;但有时还不如我们了解一个值的类型方便&#xff0c;这时候我们更希望 TypeScript 不要帮我们进行类型检查&#xff0c;而是交给我们自己来&#xff0c;所以就用到了类型断言。类型断言有点像是一种类型转换&#xff0c;它把某个值强行指定为…

Vue收集表单数据学习笔记

收集表单数据 v-model双向数据绑定&#xff0c;收集的是input框的value&#xff0c;单选按钮不存在value&#xff0c;就像代码中的男女选项&#xff0c;即使绑定性别v-model“sex”&#xff0c;控制台依然不能接收性别的值&#xff0c;因为没有value值&#xff0c;&#xff0c…

python 第二章——数据类型详解

文章目录 前言一、什么是数据类型1.变量2.注释 二、数字三、字符串四、布尔五、列表六、元组七、集合八、字典总结 前言 本系列教程目录&#xff0c;可点击这里查看&#xff1a;Python教程目录 学习一门编程语言&#xff0c;第一件事就应该是熟练掌握这门编程语言的基本数据类…

[Java]JavaWeb开发中的MVC设计模式

一、有关Java Web与MVC设计模式 学习过基本Java Web开发的人都已经了解了如何编写基本的Servlet&#xff0c;如何编写jsp及如何更新浏览器中显示的内容。但是我们之前自己编写的应用一般存在无条理性&#xff0c;对于一个小型的网站这样的编写没有任何问题&#xff0c;但是一但…

MCDF代码详解,mcdf_rgm_pkg.sv代码超详细注释

寄存器模块代码详解 好戏开始: `include "param_def.v" package mcdf_rgm_pkg; import uvm_pkg::*; `include "uvm_macros.svh" import reg_pkg::*; //具有uvm_reg类型的专用寄存器描述[write-red-reg] class ctrl_reg extends uvm_r…

机器人教学中游戏化课程案例尝试

本文内容严格按创作模板发布&#xff1a; 2023年LPL春季赛季后赛正在火热进行中&#xff0c;你们心中的总冠军是哪支队伍呢&#xff1f;作为热爱游戏的程序猿&#xff0c;一起来聊聊你那些有意义的游戏开发经历吧&#xff01; 游戏化ROS机器人课程的优势有以下七点&#xff1a…

第3章-运行时数据区

此章把运行时数据区里比较少的地方讲一下。虚拟机栈&#xff0c;堆&#xff0c;方法区这些地方后续再讲。 转载https://gitee.com/youthlql/JavaYouth/tree/main/docs/JVM。 运行时数据区概述及线程 前言 本节主要讲的是运行时数据区&#xff0c;也就是下图这部分&#xff0c…

5.微服务项目实战---Gateway--服务网关,实现统一认证、鉴权、监控、路由转发等

5.1 网关简介 大家都都知道在微服务架构中&#xff0c;一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用 这么多的微服务呢&#xff1f;如果没有网关的存在&#xff0c;我们只能在客户端记录每个微服务的地址&#xff0c;然后分别去调用。 这样的架构&#xff0…

用友联合7家信创生态伙伴成立“信创领先实践联盟”,助力企业数智化国产替代

数字经济背景下&#xff0c;面对国际局势不稳定等以切不确定因素&#xff0c;只有突破和掌握关键核心技术&#xff0c;打造生态话语权&#xff0c;掌握产业发展主动权&#xff0c;向产业价值链高端迈进&#xff0c;我国才能摆脱受制于人局面。而推动信创产业繁荣发展&#xff0…

SAP-选择实施离散制造模式还是重复制造模式?

Implement Discrete Manufacturing or Repetitive Manufacturing? 翻译一篇&#xff0c;反正我也写不出来~~~~ “狗还是猫&#xff1f;” 这可能是世界上第二难的问题。 想知道最难的是什么&#xff1f; 这里是&#xff1a; “实施离散制造还是重复制造&#xff1f;” 作…

【设计模式】我终于读懂了访问者模式。。。

&#x1f330;测评系统的需求 将观众分为男人和女人&#xff0c;对歌手进行测评&#xff0c;当看完某个歌手表演后&#xff0c;得到他们对该歌手不同的评价(评价 有不同的种类&#xff0c;比如 成功、失败 等)传统方案 &#x1f331;传统方式的问题分析 如果系统比较小&…

2023年面试题入门篇和进阶篇万余字题目总结【答案+解析】

2023年Java面试题入门篇和进阶篇总结【答案解析】 入门篇1.、下列代码输出结果是()2.x为float类型&#xff0c;y为double类型&#xff0c;a为int类型&#xff0c;b为long类型&#xff0c;c为char类型&#xff0c;问xy*a/xb/ac的值是什么类型3.下列哪种说法是正确的4.mysql表use…

rollup打包封装的js类库

rollup中文网&#xff1a;简介 | rollup.js 中文文档 | rollup.js中文网Rollup 是一个 JavaScript 模块打包器&#xff0c;可以将小块代码编译成大块复杂的代码&#xff0c;Rollup 对代码模块使用新的标准化格式&#xff0c;这些标准都包含在 JavaScript 的 ES6 版本中。https:…