MySQL视图与索引

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
数据安全中心,免费版
简介: MySQL视图与索引

1.视图

1.1定义

  1. 视图是数据库中的一种虚拟表,它由查询语句生成,根据特定的条件从一个或多个基本表中检索数据。视图可以根据需要选择性地显示表的某些列,并且可以根据查询语句的定义对数据进行过滤、排序、聚合等操作。
  2. 视图并不实际存储数据,而是在访问时动态地从基本表中检索数据。通过创建视图,可以简化复杂的查询操作,并提供更方便、更易读的数据访问方式。视图还可以用于隐藏敏感的数据,保护隐私。
  3. 视图的定义包括视图名称、所涉及的基本表、查询语句以及可选的列别名等。创建视图的语法和具体操作方式因数据库管理系统而异,但通常包括使用CREATE VIEW语句来定义视图结构,以及使用SELECT语句来指定视图的查询逻辑和筛选条件。
  4. 通过使用视图,可以将复杂的数据库结构隐藏起来,简化了对数据的访问和操作,使应用程序开发更加灵活和高效。

视图提供了以下几个重要的优点:

  1. 简化数据访问:通过使用视图,可以将复杂的查询操作封装成一个简单的接口。应用程序可以直接查询视图来获取数据,而无需编写复杂的查询语句。
  2. 数据安全性和访问控制:视图可以限制用户对敏感数据的访问权限。可以通过授权的方式控制用户对视图的查询和操作权限,保护数据的安全性。
  3. 数据抽象和逻辑组织:视图隐藏了底层表的细节,提供了一个抽象的数据层。它可以组合多个表,并对数据进行筛选、排序、聚合等操作,实现数据的逻辑组织和呈现。
  4. 性能优化:通过创建合适的视图,可以优化查询性能。视图可以缓存查询结果,减少查询的计算量,并提高查询的执行速度。
  5. 数据一致性:当底层表的数据发生变化时,视图的数据会自动更新,以保持与基本表的一致性。这保证了从视图中获取的数据始终是最新的。

需要注意的是,MySQL视图是一种虚拟表,通过查询语句的定义从基本表中获取数据。它提供了简化的数据访问方式、数据安全性和访问控制、数据抽象和逻辑组织等功能。视图可以增强数据库的可管理性和性能,并提供一致的数据视图。视图并不是独立的实体,它依赖于底层表的存在和数据的一致性。当底层表的数据发生变化时,视图的数据也会相应地改变

1.2视图与数据表的区别

MySQL视图与数据表在以下几个方面有区别:

  1. 存储方式:数据表是实际存储数据的物理表,而视图是虚拟的表,不存储实际的数据。视图通过查询基本表的数据产生结果集,该结果集在查询时被计算和生成。
  2. 数据更新:数据表允许直接进行插入、更新和删除等数据操作,而大部分视图是只读的,不允许直接修改基本表的数据。只有特定类型的视图(可更新视图)可以进行一定程度的数据修改操作。
  3. 数据结构:数据表具有自己的数据结构,定义了列名、数据类型、约束等,每个表都有自己的物理存储空间。而视图只是一个查询定义,它的数据结构基于查询语句中选择的列和连接的表的结构。
  4. 存储空间:数据表存储实际的数据,占用存储空间。视图不实际存储数据,仅存储查询定义,所以不占用独立存储空间,其结果集在查询时动态生成。
  5. 索引和约束:数据表可以为列创建索引来提高查询性能,并可以定义各种约束来保证数据的完整性和一致性。视图不能直接创建索引和约束,它依赖于基本表的索引和约束。
  6. 数据访问权限:数据表和视图都可以设置不同的访问权限,以控制用户对数据的访问。但视图可以更细粒度地控制对数据的访问,通过设置基本表和视图的权限,可以实现更加灵活的数据安全管理。

需要注意的是,虽然视图和数据表有一些区别,但从应用程序的角度来看,它们可以被当作表来使用。应用程序可以对视图执行查询、过滤、排序等操作,就像对数据表一样。这样可以简化复杂的查询操作,并提供更直观的数据访问方式。

1.3使用视图的好处

1.定制用户数据,聚焦特定的数据

在实际的应用过程中,不同的用户可能对不同的数据有不同的要求。

例如,当数据库同时存在时,如学生基本信息表、课程表和教师信息表等多种表同时存在时,可以根据需求让不同的用户使用各自的数据。学生查看修改自己基本信息的视图,安排课程人员查看修改课程表和教师信息的视图,教师查看学生信息和课程信息表的视图。

2.简化数据操作

在使用查询时,很多时候要使用聚合函数,同时还要显示其他字段的信息,可能还需要关联到其他表,语句可能会很长,如果这个动作频繁发生的话,可以创建视图来简化操作。

3. 提高数据的安全性

视图是虚拟的,物理上是不存在的。可以只授予用户视图的权限,而不具体指定使用表的权限,来保护基础数据的安全。

4. 共享所需数据

通过使用视图,每个用户不必都定义和存储自己所需的数据,可以共享数据库中的数据,同样的数据只需要存储一次。

5. 更改数据格式

通过使用视图,可以重新格式化检索出的数据,并组织输出到其他应用程序中。

6.重用 SQL 语句

视图提供的是对查询操作的封装,本身不包含数据,所呈现的数据是根据视图定义从基础表中检索出来的,如果基础表的数据新增或删除,视图呈现的也是更新后的数据。视图定义后,编写完所需的查询,可以方便地重用该视图。

1.4特点

MySQL的视图(View)具有以下优点和特点:

1. 简化复杂的查询:视图可以将复杂的查询操作封装成一个简单的查询,提供更好的可读性和易用性。通过事先定义视图的查询语句,用户可以直接查询视图,而无需编写复杂的SQL语句。

2. 数据安全性和权限控制:通过视图,可以隐藏底层表格的结构和细节,只向用户公开需要的数据。可以根据需要,对视图进行权限控制,限制用户对数据的访问和操作,实现数据的安全性和权限控制。

3. 逻辑分离和模块化:通过将数据的逻辑分离成不同的视图,可以提高数据库的模块化和可维护性。将数据的不同方面和关联关系划分到不同的视图中,使得数据库结构更加清晰和易于维护。

4. 提高性能和灵活性:通过视图,可以缓存查询结果,减少重复查询的开销,提高数据库的性能。视图可以根据需要在不同查询中灵活嵌套使用,简化复杂的查询操作,提高查询的效率。

5. 实时计算和动态更新:视图的数据并不实际存储,而是根据定义的查询语句实时计算和生成的。这意味着视图的数据会随着底层表格数据的变化而动态更新,保持数据的实时性。

6. 数据抽象和封装:通过视图,可以将数据的具体结构和实现细节抽象隐藏,向用户提供统一和抽象的数据接口。这样,用户只需关注视图所提供的数据,而无需了解底层表格的具体细节。

7. 简化应用程序开发:视图可以被应用程序直接调用,简化应用程序开发过程。应用程序开发人员可以通过视图获得特定的数据视图,而无需关心复杂的查询逻辑和底层数据表的结构。

总结而言,MySQL的视图具有简化复杂查询、提供数据安全性和权限控制、逻辑分离和模块化、提高性能和灵活性、实时计算和动态更新、数据抽象和封装以及简化应用程序开发的优点和特点。视图是提供数据的逻辑表示,可以大大简化数据查询和操作,并提供更好的数据安全性和权限控制。

1.5语法

1.5.1创建视图

在 MySQL 中,创建视图使用的语法如下:

CREATE VIEW view_name [(column1, column2, ...)]
AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

解释一下各个部分:

  • CREATE VIEW view_name:指定要创建的视图的名称。
  • [(column1, column2, ...)]:可选的,指定视图的列名。如果不指定列名,将默认使用查询结果的列名。
  • AS:表示接下来的语句是视图的定义。
  • SELECT column1, column2, ...:指定视图要显示的列名。可以是来自一个或多个表的列,也可以是常量或表达式。
  • FROM table_name:指定从哪个表中获取数据。可以是单个表或多个表的联接。
  • WHERE condition:可选的,用于指定筛选数据的条件。

以下是一个具体的例子,演示如何创建一个名为 customer_view 的视图,该视图从 customers 表中筛选出名字以 “John” 开头的客户,并只显示他们的名字和电话号码:

CREATE VIEW customer_view AS
SELECT name, phone
FROM customers
WHERE name LIKE 'John%';

需要注意的是,视图只是一个查询定义,并不包含实际的数据。因此,当基本表发生更改时,视图的数据会自动更新以保持与基本表的一致性。此外,可以像操作实际的表一样,对视图进行查询、插入、更新和删除等操作。

1.5.2查询视图数据

创建成功后,可以通过查询 customer_view 视图来访问它的数据:

SELECT * FROM customer_view;

这将返回满足视图定义中筛选条件的客户的名字和电话号码。

1.5.3更新视图数据

视图的可更新性取决于视图的定义和底层表的约束条件。在某些情况下,你可以对视图进行UPDATE、INSERT和DELETE操作,以更新底层表中的数据。例如:

UPDATE view_name SET column1 = value1 WHERE condition;
INSERT INTO view_name (column1, column2, ...) VALUES (value1, value2, ...);
DELETE FROM view_name WHERE condition;

注意,进行视图更新时,需要确保视图的定义满足各种约束条件。

1.5.4修改视图定义

你可以使用ALTER VIEW语句来修改已存在的视图定义。例如:

ALTER VIEW view_name AS
SELECT column1, column2, ...
FROM table1
WHERE condition;

通过修改视图定义,可以重新定义视图的查询逻辑、添加新的列或更改查询条件。

1.5.5删除视图

如果不再需要某个视图,可以使用DROP VIEW语句将其从数据库中删除。例如:

DROP VIEW view_name;

请谨慎删除视图,因为一旦删除,视图的定义和数据将无法恢复。

2.索引

2.1定义

  1. 在MySQL中,索引是一种用于加快数据检索速度的数据结构。通过创建索引,可以提高查询效率,并减少数据库的读取操作。索引可以在一个或多个列上创建,以帮助数据库引擎快速定位和访问数据。
  2. 索引可以看作是一个排好序的数据集合,其中每个数据项都包含了指向实际数据的引用。MySQL使用B树或B+树作为索引数据结构,这种数据结构可以快速地定位和搜索数据

2.2使用索引的好处

索引是 MySQL 中十分重要的数据库对象,是数据库性能调优技术的基础,常用于实现数据的快速检索。

数据库中使用索引有以下几个重要的原因:

  1. 提高查询性能:索引可以大大加快数据库的查询速度。通过使用索引,数据库引擎可以更快地定位和访问需要的数据,减少了全表扫描的开销,从而加快查询操作的响应时间。
  2. 减少输入/输出开销:通过使用索引,数据库可以最小化磁盘I/O的次数。相比于扫描整个表,使用索引可以快速定位到需要的数据,减少了从磁盘读取数据的次数,从而大大减少了I/O开销。
  3. 优化排序和分组操作:当执行排序或分组操作时,索引可以使这些操作更有效。索引可以按特定的顺序存储数据,这样排序和分组操作就可以利用索引的有序性,减少排序和分组的开销。
  4. 提高并发性能:索引可以减少查询的锁定时间,提高数据库的并发性能。当多个查询同时访问数据库时,使用索引可以减少查询之间的冲突和锁定,提高并发操作的效率。
  5. 约束数据完整性:通过在数据库中创建唯一索引或主键索引,可以确保数据的唯一性和完整性。索引可以防止重复值的插入,保证数据的一致性和正确性

需要注意的是,索引并不是万能的,过多或不必要的索引可能会增加数据库的存储空间和维护成本,并对数据的写操作性能产生负面影响(比如性能下降)因此,在创建索引时需要综合考虑查询的频率、数据的唯一性要求、表的大小和写操作的频率等因素,以权衡索引的优势和开销,以达到最佳的性能和维护效果。

尽管索引提供了许多优点,但也存在一些潜在的缺点。索引需要占用额外的存储空间,并在数据更新时需要维护索引结构,这可能会增加写入操作的开销。此外,过度使用或不正确使用索引可能会导致性能下降,因此需要根据具体情况慎重选择索引列和类型。在设计和使用索引时,需要综合考虑数据库的查询模式、数据访问方式、数据大小和更新频率等因素,以权衡索引的利弊,从而实现最佳的性能和数据完整性。

在 MySQL 中,通常有以下两种方式访问数据库表的行数据:

1.顺序访问

顺序访问是在表中实行全表扫描,从头到尾逐行遍历,直到在无序的行数据中找到符合条件的目标数据。

顺序访问实现比较简单,但是当表中有大量数据的时候,效率非常低下。例如,在几千万条数据中查找少量的数据时,使用顺序访问方式将会遍历所有的数据,花费大量的时间,显然会影响数据库的处理性能。

2.索引访问

索引访问是通过遍历索引来直接访问表中记录行的方式。

使用这种方式的前提是对表建立一个索引,在列上创建了索引之后,查找数据时可以直接根据该列上的索引找到对应记录行的位置,从而快捷地查找到数据。索引存储了指定列数据值的指针,根据指定的排序顺序对这些指针排序。

总而言之,不使用索引,MySQL 就必须从第一条记录开始读完整个表,直到找出相关的行。表越大,查询数据所花费的时间就越多。如果表中查询的列有一个索引,MySQL 就能快速到达一个位置去搜索数据文件,而不必查看所有数据,这样将会节省很大一部分时间。

2.3访问方式

在MySQL中,通常有两种主要的访问数据的方式:

2.3.1顺序访问

顺序访问是一种按照数据物理存储顺序的方式进行数据读取的方法。当使用顺序访问时,数据库系统按照数据在磁盘上的存储位置,从头到尾逐个读取数据行。这种方式适合于需要处理整个数据集或大部分数据的情况,例如数据导出、数据备份等。顺序访问对于数据聚集或批量处理较为高效,但对于随机查询或只需访问部分数据的场景不够有效。

使用顺序访问的主要优点是:

  1. 适用于处理整个数据集:顺序访问适用于需要处理整个数据集或大部分数据的情况。当需要对数据进行全表扫描、数据导出、数据备份等操作时,顺序访问是一种有效的方式。它可以按照数据物理存储的顺序逐个读取数据行,不会漏掉任何数据。
  2. 减少磁盘寻道时间:顺序访问可以减少磁盘的寻道时间。由于数据物理存储位置相邻,当读取一个数据块后,下一个数据块通常在相邻位置,减少了磁盘头移动的时间,从而提高读取效率。
  3. 数据聚集和批量处理效率高:顺序访问在数据聚集和批量处理方面效率较高。当需要进行数据聚合、排序、分组或批量操作时,顺序访问可以更好地利用数据在存储介质上的连续性,提高处理效率。
  4. 遍历操作简单:顺序访问使得遍历操作变得简单。通过逐个读取数据行,可以按照数据的逻辑顺序进行处理,更容易进行逻辑判断和处理。

尽管顺序访问有其优点,但对于随机查询或只需访问部分数据的场景来说并不适用。在这些情况下,索引访问通常更有效,可以快速定位和读取所需的数据行。因此,在设计数据库和查询时,需要根据具体需求综合考虑并选择适当的访问方式。

2.3.2索引访问

索引访问是通过使用索引来快速定位所需数据的方式。索引是一种特殊的数据结构,可以加快数据的查询速度。当使用索引访问时,数据库系统通过查询索引结构,找到符合查询条件的数据位置,然后直接读取相应的数据行。索引访问适合于快速定位和查询特定数据行的场景,对于随机查询或只需访问部分数据的操作较为高效。

使用索引访问的主要优点包括:

  1. 快速定位数据:索引访问可以通过查询索引结构来快速定位所需数据,而不需要遍历整个数据集。通过索引,数据库系统可以直接跳转到满足查询条件的数据位置,提高查询效率。
  2. 提高查询性能:索引访问可以大大提高查询的性能,尤其是对于大型数据表来说。通过使用索引,数据库可以快速定位到满足查询条件的数据行,避免全表扫描,从而减少搜索的时间。
  3. 加速排序操作:索引访问可以加速排序操作的执行。当查询需要对结果进行排序时,如果已经创建了相应的索引,数据库可以利用索引的有序性进行快速排序,而不需要进行全表排序。
  4. 减少数据的I/O操作:使用索引访问可以减少数据库需要读取的数据量,从而减少磁盘和内存之间的数据传输量。通过直接定位到索引中的位置,只需要读取必要的数据行,提高了数据访问的效率。
  5. 改善并发性能:索引访问可以提高数据库的并发性能。当多个查询同时进行时,索引访问可以减少锁定的范围,降低了锁定的竞争程度,提升了并发查询的效率。

需要注意的是,索引访问通常比顺序访问更快速,特别是对于大型数据集和频繁的查询操作。因此,在设计数据库和查询时,通常使用索引来优化查询性能。但同时,索引会增加数据库的存储空间和维护成本,对于频繁执行的写操作可能会产生额外的开销。因此,在创建索引时需要权衡索引的优势和开销,选择适当的索引策略来提高查询性能。

2.4优缺点

索引有其明显的优势,也有其不可避免的缺点。

2.4.1优点

索引的优点如下:

  • 通过创建唯一索引可以保证数据库表中每一行数据的唯一性。
  • 可以给所有的 MySQL 列类型设置索引。
  • 可以大大加快数据的查询速度,这是使用索引最主要的原因。
  • 在实现数据的参考完整性方面可以加速表与表之间的连接。
  • 在使用分组和排序子句进行数据查询时也可以显著减少查询中分组和排序的时间

2.4.2缺点

增加索引也有许多不利的方面,主要如下:

  • 创建和维护索引组要耗费时间,并且随着数据量的增加所耗费的时间也会增加。
  • 索引需要占磁盘空间,除了数据表占数据空间以外,每一个索引还要占一定的物理空间。如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。
  • 当对表中的数据进行增加、删除和修改的时候,索引也要动态维护,这样就降低了数据的维护速度。

索引可以提高查询速度,但是会影响插入记录的速度。因为,向有索引的表中插入记录时,数据库系统会按照索引进行排序,这样就降低了插入记录的速度,插入大量记录时的速度影响会更加明显。这种情况下,最好的办法是先删除表中的索引,然后插入数据,插入完成后,再创建索引。

2.5什么情况不用索引

索引虽好但也有不足之处,那么什么时候不该建议使用索引呢?

  • 表记录太少
  • 经常增删改的表
  • 数据重复且分布均匀的表字段,只应该为经常查询和最经常排序的数据列建立索引(如果某个数据类包含太多的重复数据,建立索引没有太大意义)
  • 频繁更新的字段不适合创建索引(会增加IO负担)
  • where条件里用不到的字段不创建索引

2.6什么情况下索引会失效

出现以下情况时,索引会失效:

  • like以通配符%开头索引失效
  • 当全表扫描比走索引查询的快的时候,会使用全表扫描,而不走索引
  • 字符串不加单引号索引会失效
  • where中索引列使用了函数(例如substring字符串截取函数)
  • where中索引列有运算(用了< or > 右边的索引会失效,用<= or >= 索引不会失效)
  • is null可以走索引,is not null无法使用索引(取决于某一列的具体情况)
  • 复合索引没有用到左列字段(最左前缀法则,如果没用用到最左列索引,或中间跳过了某列有索引的列,索引会部分失效)
  • 条件中有or,前面的列有索引,后面的列没有,索引会失效。想让索引生效,只能将or条件中的每个列都加上索引

注意:

需要注意的是,索引失效并不意味着索引就无用或无效,而是在特定的查询或操作场景下,索引可能无法发挥其预期的作用。在设计和优化数据库时,需要根据具体的应用需求综合考虑,选择合适的索引策略并避免潜在的索引失效情况。

2.7索引的分类

2.7.1普通索引

普通索引是最基本的索引,它没有任何限制;

创建索引语法:

create index index_name on table(column);

修改表结构方式添加索引:

ALTER TABLE table_name ADD INDEX index_name ON (column(length))

删除索引:

DROP INDEX index_name ON table

2.7.2唯一索引

唯一索引与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。

如下:

CREATE UNIQUE INDEX indexName ON table(column(length))

2.7.3主键索引

主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。

在MySQL中,可以使用PRIMARY KEY关键字来声明主键索引。

ALTER TABLE Student ADD PRIMARY KEY (StudentID);

这条语句将在Student表的StudentID字段上创建一个主键索引。

创建主键索引后,学生表的每一行记录的学生ID列都必须是唯一的,而且不能为空。如果尝试插入或更新一条记录时出现重复的学生ID或NULL值,将会触发错误。

2.7.4组合索引

组合索引指在多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合。

create index idx_userid_moduleid_url on t_log(userid,moduleid,url)

注意:

组合遵循最左前缀原则。那么什么是最左前缀原则?

如下:

最左前缀原则(Leftmost Prefix Rule)是指在组合索引中,只有按照索引的最左边列开始进行查询时,索引才会被使用。如果查询中未按照索引的最左前缀开始,即使其后面的列匹配索引中的列,也无法使用该索引。最左前缀原则的重要性在于确定组合索引的创建顺序,以最大程度地提高查询性能。对于一个复合索引,索引的最左列是最重要的,其次是第二列,依此类推。按照最左前缀原则创建索引,可以使查询在索引中进行范围扫描,从而减少需要读取的索引块数。

2.7.5全文索引

全文索引是一种用于快速搜索文本内容的索引结构,可以在大量文本数据中高效地进行关键字搜索和文本匹配。

  1. 全文索引用于对文本数据进行关键字搜索,支持模糊匹配和全文检索。
  2. Mysql的InnoDB和MyISAM存储引擎都支持全文索引,但实现方式略有差异。

在MySQL中,可以使用CREATE FULLTEXT INDEX语句来创建全文索引。如下:

CREATE FULLTEXT INDEX idx_fulltext_title_content ON Articles(Title, Content);

解释:

这条语句会在在名为Articles表的Title和Content字段上创建一个名为idx_fulltext_title_content的全文索引。

一旦全文索引创建完成,可以使用全文搜索功能。以下是几个常用的全文搜索函数:

  • MATCH: 用于指定要搜索的列。
  • AGAINST: 用于指定搜索的关键词。
  • BOOLEAN MODE: 用于支持布尔搜索。

下面是一个使用全文索引进行搜索的例子:

SELECT * FROM table_name WHERE MATCH(column_name) AGAINST('keyword');

全文索引在大量数据和复杂查询场景下性能可能有限。在某些情况下,可以考虑使用更专业的全文搜索引擎,如Elasticsearch和Solr。

注意:

  • 需要使用支持全文索引的数据库引擎,如MySQL的MyISAM或InnoDB引擎。
  • 全文索引可能会消耗大量的存储空间。较大的数据集可能需要更多的存储空间来保存全文索引,因此需要评估索引的大小。
  • 全文索引的性能受数据量和查询复杂性的影响。对于大量数据和复杂查询,可能需要进行性能调优。
  • 全文索引还可以使用一些特殊的操作符,如+、-、>等,以更精确地控制搜索条件。

特殊的操作符:

符号 含义
+ 必须包含此字符串
- 必须不包含此字符串
"" 双引号内作为整体不能拆词
> 提高该词的相关性,查询的结果靠前
< 降低该词的相关性,查询结果靠后
* 通配符,只能接在词的后面

总结来说,MySQL的全文索引是一种用于文本列的索引类型,可以提供高效的全文搜索功能。通过创建索引和使用相应的查询语句,可以实现对文本数据的灵活和高效的搜索。

2.7.6使用索引时候的注意事项

在使用索引时,以下是一些使用MySQL数据库时需要注意的事项:

  1. 选择适当的数据类型:选择适当的数据类型可以减小索引的大小,提高查询性能。使用尽可能小的数据类型来存储索引字段,同时确保数据类型足够容纳所需的数据。
  2. 为频繁查询的列创建索引:根据查询的频率和重要性,为经常用于查询条件或连接操作的列创建索引。这样可以提高这些查询的性能。
  3. 不要过度索引:避免过度索引,只创建必要的索引。每个索引都需要额外的存储空间和维护开销,过多的索引会降低性能,并增加写操作的成本。
  4. 考虑组合索引:对于多个列的查询条件,考虑使用组合索引。在创建组合索引时,根据查询的顺序和重要性选择合适的列顺序,以最大程度地提高查询性能。
  5. 定期更新索引统计信息:MySQL的查询优化器使用索引统计信息来选择执行计划。确保经常更新和维护索引的统计信息,以确保优化器做出准确的决策。
  6. 避免在索引列上进行函数或计算操作:对于索引列,避免在查询条件中应用函数、表达式或计算操作。这样会导致MySQL无法使用索引,而是进行全表扫描。
  7. 避免过长的索引:长索引会占用更多的存储空间,并增加查询和更新操作的开销。对于字符串列,可以考虑使用前缀索引或其他方法来减小索引尺寸。
  8. 避免频繁更新的索引列:频繁更新的索引列会导致索引的重新组织和维护,增加性能开销。评估索引列的更新频率,确保更频繁更新的列不作为索引列。
  9. 定期进行索引优化和维护:定期进行索引的优化和维护可帮助提高查询性能并减少存储开销。可以重建索引、重新组织索引或删除不再需要的索引。

最后,请记住,在使用索引时需要综合考虑查询模式、数据访问模式、索引的选择和设计等因素。优化索引的使用可以提高查询性能和整体数据库的效率。

3.数据的导入导出

3.1方式一

使用工具,类似Sqlyog、Navicat等导入导出数据,右键选择运行SQL文件。

选择sql文件所在的路径

然后等待一会

3.2方式二

使用mysqldump导入导出

3.2.1导出表数据和表结构

注:在MySQL的安装bin目录下使用命令的形式

命令:mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql(这个名字随便叫)

找到bin目录后,在地址栏输入CMD

执行命令时无需登录服务端,但是执行命令需要携带数据库用户及密码。输入命令即可。

>mysqldump -uroot -p123456 mybatis_ssm > Kissship.sql

然后我们即可发现导出的sql文件再bin目录下 ,命名为Kissship.sql

3.2.2只导出表结构

在bin目录下输入:

mysqldump -u用户名 -p密码 -d 数据库名 > 数据库名.sql

即可实现只导出表结构

3.2.3导出数据

首先连接数据库

 创建空数据库mysql>create database abc;

方法一:

   mysql>use abc;                   #选择数据库

   mysql>set names utf8;            #设置数据库编码

   mysql>source /home/abc/abc.sql;  #导入数据

方法二:

mysql -u用户名 -p密码 数据库名 < 数据库名.sql

   #mysql -uabc_f -p abc < abc.sql

3.3方式三

LOAD DATA INFILE

可先通过SELECT INTO OUTFILE方式,将数据导出到Mysql的指定目录下,再通过LOAD DATA INFILE方式导入。

1) select * from 表名 into outfile '/文件名.sql';

这个方法必须要保证我们安装目录的my.ini文件中有做权限分配

2) load data infile '/文件名.sql' into table 表名(列名1,...);

这里要保持列名的一致性

4.如何查看自己的MySQL安装路径

有两种方法,一种是通过查询本地服务,另一种是通过MySQL命令

这里只展示方法二:

4.1登录MySQL

登录MySQL,用命令提示符中或者一些其他的MySQL可视化工具(以在命令提示符中为例)如下:

4.2输入指定命令

命令如下:

show variables like'%basedir%';

输入之后回车即可看到我们的MySQL安装路径啦!


最后MySQL视图与索引就到这里,祝大家在敲代码的路上一路通畅!

感谢大家的观看 !


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3天前
|
SQL 关系型数据库 MySQL
深入解析MySQL的EXPLAIN:指标详解与索引优化
MySQL 中的 `EXPLAIN` 语句用于分析和优化 SQL 查询,帮助你了解查询优化器的执行计划。本文详细介绍了 `EXPLAIN` 输出的各项指标,如 `id`、`select_type`、`table`、`type`、`key` 等,并提供了如何利用这些指标优化索引结构和 SQL 语句的具体方法。通过实战案例,展示了如何通过创建合适索引和调整查询语句来提升查询性能。
38 9
|
1月前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
|
2月前
|
存储 关系型数据库 MySQL
阿里面试:为什么要索引?什么是MySQL索引?底层结构是什么?
尼恩是一位资深架构师,他在自己的读者交流群中分享了关于MySQL索引的重要知识点。索引是帮助MySQL高效获取数据的数据结构,主要作用包括显著提升查询速度、降低磁盘I/O次数、优化排序与分组操作以及提升复杂查询的性能。MySQL支持多种索引类型,如主键索引、唯一索引、普通索引、全文索引和空间数据索引。索引的底层数据结构主要是B+树,它能够有效支持范围查询和顺序遍历,同时保持高效的插入、删除和查找性能。尼恩还强调了索引的优缺点,并提供了多个面试题及其解答,帮助读者在面试中脱颖而出。相关资料可在公众号【技术自由圈】获取。
|
2月前
|
SQL 关系型数据库 MySQL
案例剖析:MySQL唯一索引并发插入导致死锁!
案例剖析:MySQL唯一索引并发插入导致死锁!
180 0
案例剖析:MySQL唯一索引并发插入导致死锁!
|
7天前
|
缓存 关系型数据库 MySQL
MySQL 索引优化以及慢查询优化
通过本文的介绍,希望您能够深入理解MySQL索引优化和慢查询优化的方法,并在实际应用中灵活运用这些技术,提升数据库的整体性能。
47 18
|
6天前
|
缓存 关系型数据库 MySQL
MySQL 索引优化以及慢查询优化
通过本文的介绍,希望您能够深入理解MySQL索引优化和慢查询优化的方法,并在实际应用中灵活运用这些技术,提升数据库的整体性能。
17 7
|
5天前
|
缓存 关系型数据库 MySQL
MySQL 索引优化与慢查询优化:原理与实践
通过本文的介绍,希望您能够深入理解MySQL索引优化与慢查询优化的原理和实践方法,并在实际项目中灵活运用这些技术,提升数据库的整体性能。
26 5
|
9天前
|
存储 关系型数据库 MySQL
Mysql索引:深入理解InnoDb聚集索引与MyisAm非聚集索引
通过本文的介绍,希望您能深入理解InnoDB聚集索引与MyISAM非聚集索引的概念、结构和应用场景,从而在实际工作中灵活运用这些知识,优化数据库性能。
57 7
|
25天前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
25 2
|
2月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
71 3
Mysql(4)—数据库索引
下一篇
DataWorks