SQL 索引
一、索引的基本概念
**索引(Index)**是数据库中一种特殊的数据结构,用于帮助数据库管理系统(DBMS)快速访问数据表中的特定信息。索引类似于书籍的目录,可以加快数据检索的速度。
二、索引的作用
- 提高查询效率:通过索引,数据库系统可以快速定位到表中的数据,减少全表扫描的需要。
- 优化数据排序和分组:在排序和分组操作中,索引可以显著减少数据比较和移动的次数。
- 保证数据的唯一性:通过创建唯一索引或主键索引,可以确保表中数据的唯一性。
- 支持高效的表连接:在涉及多个表的查询中,索引可以加速表之间的连接过程。
三、索引的分类
SQL索引可以根据不同的标准进行分类,常见的分类方式包括:
-
按存储结构分类:
- B树索引:包括B-Tree和B+Tree等,是数据库中最常用的索引类型。
- 哈希索引:通过哈希函数计算索引列的哈希值来快速定位数据。
- 全文索引:用于对文本内容进行搜索,支持复杂的查询语法。
- 空间索引:用于存储地理空间数据,如地理信息系统(GIS)中的坐标数据。
-
按功能分类:
- 普通索引:最基本的索引类型,没有任何限制。
- 唯一索引:要求索引列的值必须唯一。
- 主键索引:特殊的唯一索引,用于唯一标识表中的每一行数据。
- 复合索引:包含多个列的索引,用于提高多列查询的性能。
四、索引的优缺点
优点:
- 提高查询效率。
- 优化数据排序和分组。
- 支持高效的表连接。
- 保证数据的唯一性。
缺点:
- 增加I/O成本:索引文件会占用额外的磁盘空间,并可能增加磁盘I/O操作的次数。
- 降低写操作性能:在插入、更新或删除数据时,索引也需要被更新,这可能会降低写操作的性能。
- 索引过多可能导致性能下降:不合适的索引或索引过多可能会降低数据库的整体性能。
五、索引的使用场景
索引的使用应基于具体的业务需求和数据特点进行决策。以下是一些常见的使用场景:
- 经常出现在查询条件中的列。
- 参与排序或分组操作的列。
- 经常参与表连接的列。
- 唯一性要求较高的列,如用户ID、邮箱地址等。
六、索引的创建和维护
创建索引:
可以使用CREATE INDEX
语句在数据库中创建索引。例如:
CREATE INDEX idx_name ON table_name (column_name);
删除索引:
当索引不再需要时,可以使用DROP INDEX
语句将其删除。例如:
DROP INDEX idx_name ON table_name;
维护索引:
- 定期重建索引:随着数据的增加和修改,索引可能会变得碎片化,定期重建索引可以恢复其性能。
- 监控索引使用情况:通过数据库管理工具或SQL语句监控索引的使用情况,及时发现并解决索引相关问题。
七、索引的最佳实践
- 仅为需要的列创建索引:避免为不常用的列或重复率高的列创建索引。
- 考虑使用复合索引:当查询条件涉及多个列时,考虑创建复合索引以提高查询性能。
- 避免索引过多:索引虽然可以提高查询性能,但过多的索引会降低写操作的性能并增加存储空间的消耗。
- 利用索引的覆盖扫描:尽量使查询只通过索引就能获取所需的数据,避免回表查询。
索引的基本原理
-
数据结构:索引通常使用一种数据结构来存储数据,如B树(最常见的是B+树)、哈希表等。这些数据结构允许数据库系统以比全表扫描更快的速度查找、插入、删除和更新数据。
-
排序与存储:在创建索引时,数据库会根据索引列的值对数据进行排序,并将这些值存储在索引结构中。对于B树等平衡树结构,这种排序和层次化的存储方式可以确保查询效率。
-
键值对:索引通常作为键值对存储,其中键是索引列的值,值是指向表中相应行的指针或行号。这样,当查询使用索引列时,数据库可以快速定位到数据的物理位置。
索引的作用
-
加速数据检索:索引的主要作用是加快数据检索的速度。通过索引,数据库可以迅速定位到数据的存储位置,而不需要扫描整个表。这对于大数据量的表尤其重要。
-
减少I/O成本:数据库操作(尤其是查询操作)的性能瓶颈往往在于磁盘I/O。索引可以显著减少查询过程中需要读取的数据量,从而降低I/O成本。
-
支持排序和分组:通过索引,数据库可以更高效地执行排序和分组操作,因为索引本身就已经对数据进行了排序。
-
实现数据唯一性:唯一索引可以确保索引列的值在表中是唯一的,这有助于维护数据的完整性和一致性。
-
优化连接查询:在涉及多个表的连接查询中,索引可以显著减少连接过程中需要比较和匹配的行数,从而提高查询效率。
注意事项
虽然索引可以显著提高查询性能,但它们也有其局限性:
-
索引维护成本:索引本身需要占用额外的存储空间,并且在数据插入、更新和删除时,索引也需要被相应地更新,这会增加额外的维护成本。
-
查询优化器:数据库查询优化器会根据查询条件和表结构等因素自动选择是否使用索引以及使用哪个索引。因此,并不是所有的查询都会使用索引。
-
索引选择:设计索引时需要谨慎选择索引列和索引类型,以平衡查询性能和维护成本。过多的索引可能会降低数据更新的性能并增加存储成本。
不同类型的索引在数据库中各有其独特的特点和适用场景。以下是几种常见索引类型的特点和适用场景的详细分析:
一、普通索引
特点:
- 最基本的索引类型,没有唯一性限制。
- 允许为NULL值。
- 不可以被引用为外键。
- 一个表可以有多个普通索引。
适用场景:
- 用于加速对表中数据的访问和检索,特别是在数据量较大且查询频繁的列上创建普通索引,可以显著提高查询效率。
- 当查询条件中未涉及唯一性要求时,可以使用普通索引。
二、唯一索引
特点:
- 数据列不允许重复,但允许为NULL值(但一个表中只能有一个NULL值,因为NULL在唯一性比较中被视为特殊值)。
- 不可以被引用为外键。
- 一个表允许多个列创建唯一索引。
适用场景:
- 用于保证数据的唯一性,避免数据重复。
- 在需要保证某列或某几列组合值唯一的场景下,使用唯一索引可以确保数据的准确性。
- 当查询条件中涉及唯一性要求时,使用唯一索引可以加速查询速度。
三、主键索引
特点:
- 主键索引是一种特殊的唯一索引,它不仅要求数据列的值唯一,而且不允许为NULL。
- 每个表只能有一个主键索引。
- 主键索引可以被引用为外键。
适用场景:
- 用于唯一标识表中的每一行数据,确保数据的完整性和一致性。
- 在需要快速访问表中特定行的场景下,使用主键索引可以显著提高查询效率。
- 主键索引是表设计和数据库优化中非常重要的一个方面,它对于数据库的性能和可维护性都有重要影响。
四、组合索引
特点:
- 使用多个列来组成一个索引。
- 可以提高包含这些列的查询的效率,特别是当这些列经常一起出现在查询条件中时。
- 组合索引的顺序很重要,因为它会影响查询优化器对索引的选择和使用。
适用场景:
- 当查询条件涉及多个列时,使用组合索引可以显著减少需要扫描的数据量,提高查询效率。
- 在需要对多个列进行联合查询、排序或过滤操作的场景下,使用组合索引可以优化查询性能。
五、其他索引类型(如全文索引)
特点:
- 全文索引是一种特殊类型的索引,用于在文本数据中搜索关键字。
- 它与常规索引在数据结构和使用方式上有所不同,通常用于全文搜索场景。
适用场景:
- 适用于海量数据的关键字模糊搜索,如搜索引擎中的文本搜索功能。
- 当需要在文本字段中执行复杂搜索时(如包含通配符的搜索、同义词搜索等),全文索引可以提供更高效的解决方案。
以下是关于如何创建、查看和删除索引的详细步骤:
创建索引
创建索引的方法多种多样,但主要可以归纳为以下几种:
-
在创建表时指定索引:
- 在使用
CREATE TABLE
语句创建表时,可以直接在列定义后指定索引。这包括主键索引、唯一索引等。 - 示例(假设创建一个名为
students
的表,并在id
列上创建主键索引):CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),age INT,INDEX idx_name (name) -- 在name列上创建普通索引 );
- 在使用
-
使用ALTER TABLE语句添加索引:
- 如果表已经存在,可以使用
ALTER TABLE
语句为表添加索引。 - 示例(为
students
表的age
列添加普通索引):ALTER TABLE students ADD INDEX idx_age (age);
- 如果表已经存在,可以使用
-
使用CREATE INDEX语句创建索引:
- 另一种为已存在的表创建索引的方法是使用
CREATE INDEX
语句。 - 示例(为
students
表的name
和age
列组合创建索引):CREATE INDEX idx_name_age ON students (name, age);
- 另一种为已存在的表创建索引的方法是使用
查看索引
查看索引的方法因数据库系统而异,但大多数数据库都提供了相应的命令或查询方式来查看索引信息。
-
使用SHOW INDEX命令(MySQL):
- 对于MySQL数据库,可以使用
SHOW INDEX
命令查看表的索引信息。 - 示例:
SHOW INDEX FROM students;
- 这将列出
students
表的所有索引信息,包括索引名、列名、索引类型等。
- 对于MySQL数据库,可以使用
-
查询INFORMATION_SCHEMA.STATISTICS表(MySQL):
- 另一个查看索引的方法是查询
INFORMATION_SCHEMA.STATISTICS
表。这个表存储了数据库中所有表的统计信息,包括索引信息。 - 示例查询:
SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'your_database_name' AND TABLE_NAME = 'students';
- 另一个查看索引的方法是查询
-
使用系统视图或函数(其他数据库系统):
- 对于其他数据库系统(如SQL Server、Oracle等),可能需要使用系统视图或特定的函数来查看索引信息。具体方法请参考相应数据库的官方文档。
删除索引
删除索引同样需要根据数据库系统的不同而采用不同的方法。
-
使用DROP INDEX命令:
- 大多数数据库系统都支持使用
DROP INDEX
命令来删除索引。 - 示例(MySQL):
DROP INDEX idx_name ON students;
- 注意:在某些数据库系统中(如SQL Server),
DROP INDEX
命令的语法可能略有不同,需要指定表名和索引名,但不使用ON
关键字。
- 大多数数据库系统都支持使用
-
使用ALTER TABLE语句:
- 另一种删除索引的方法是使用
ALTER TABLE
语句。 - 示例(MySQL):
ALTER TABLE students DROP INDEX idx_age;
- 另一种删除索引的方法是使用
-
使用数据库管理工具:
- 除了使用SQL命令外,还可以使用数据库管理工具(如MySQL Workbench、SQL Server Management Studio等)来图形化地创建、查看和删除索引。这些工具通常提供了更直观的操作界面和丰富的功能选项。
注意事项
- 在创建、查看和删除索引时,请确保对数据库系统有足够的了解,以避免不必要的错误和数据丢失。
- 索引虽然可以提高查询效率,但也会占用额外的存储空间,并可能增加数据插入、更新和删除操作的开销。因此,在创建索引时需要根据实际情况进行权衡和选择。
- 在删除索引之前,请确保该索引不再被使用,或者已经有了替代的索引方案。否则,删除索引可能会导致查询性能下降。
索引对数据库性能的影响显著,既包括正面影响,也伴随着潜在的负面影响。以下是详细的分析:
正面影响
-
加快数据检索速度:
- 索引可以显著加快数据的检索速度。通过索引,数据库系统可以直接定位到目标数据的位置,而无需逐条扫描整个表。这在大规模数据集中尤为重要,可以极大地提高查询效率。
- 索引还可以减少数据库的扫描行数,从而降低I/O成本,因为数据库系统可以更快地找到所需的数据,而无需读取整个表或大量无关的数据行。
-
提高数据库性能:
- 使用索引可以减少数据库系统的磁盘I/O操作次数,因为索引通常存储在内存中,可以快速访问。这有助于提升整个数据库系统的性能,特别是在处理复杂查询和大量数据时。
- 索引还可以优化查询计划,使数据库系统能够更有效地执行查询操作。查询优化器可以利用索引来生成更高效的查询计划,从而提高查询的响应时间和吞吐量。
-
确保数据的唯一性:
- 唯一索引和主键索引可以确保数据库中数据的唯一性。这有助于维护数据的完整性和一致性,防止数据重复和错误。
潜在的负面影响
-
增加存储空间需求:
- 索引需要占用额外的存储空间。对于大型数据库来说,索引所占的存储空间可能会相当大,这会增加数据库的存储成本。
- 随着索引数量的增加,数据库的总体存储需求也会相应增加。因此,在创建索引时需要权衡其对存储空间的影响。
-
增加写入成本:
- 每次插入、更新或删除数据时,数据库系统不仅需要修改数据本身,还需要更新相应的索引。这会增加写入操作的开销,降低写入性能。
- 在高并发的写入操作场景下,频繁更新索引可能会成为性能瓶颈。因此,在设计索引时需要考虑到其对写入性能的影响。
-
降低查询优化器的效率:
- 在某些情况下,索引可能会导致查询优化器选择次优的查询计划。这可能是因为索引的存在使得查询优化器在评估查询成本时产生了误导。
- 因此,在创建索引时需要仔细考虑其是否真正有助于优化查询性能,并避免创建冗余或不必要的索引。
-
索引维护成本:
- 索引需要定期维护以保持其性能。这包括重建或重组索引、更新索引统计信息等操作。这些操作需要消耗额外的资源和时间,并可能对数据库性能产生短期影响。
- 数据库管理员需要具备一定的技术水平来有效地管理索引,包括选择适当的索引策略、优化查询性能以及定期维护索引等。
当某一列带有索引,但其中的一些数据被删除时,索引的更新通常是由数据库管理系统(DBMS)自动处理的,无需用户手动干预。数据库索引的目的是为了加快数据检索的速度,它们与表中的数据紧密相关,但索引本身并不存储数据,而是存储了指向表中数据的指针或位置信息。
以下是关于索引如何自动更新以反映数据删除操作的详细说明:
索引的自动更新机制
-
数据删除操作:
- 当用户执行数据删除操作时(如使用
DELETE
语句),DBMS首先会从表中移除指定的数据行。 - 这个删除操作不仅仅影响表中的数据,还会影响到与这些数据相关联的索引。
- 当用户执行数据删除操作时(如使用
-
索引的更新:
- 在删除表中的数据行时,DBMS会自动更新所有受影响的索引。
- 对于每个被删除的数据行,DBMS会从索引中移除对应的索引项(即指向该数据行的指针或位置信息)。
- 这种更新是即时的,意味着一旦数据行从表中删除,相应的索引项也会立即被移除。
-
性能考虑:
- 索引的自动更新虽然保证了索引与表数据的一致性,但也可能对性能产生一定影响。
- 特别是在执行大量删除操作时,索引的更新可能会成为性能瓶颈。
- 因此,在执行大量删除操作之前,有时可能需要考虑其他策略,如批量删除、索引重建等,以优化性能。
索引重建
- 如果删除操作导致索引碎片化严重,影响了查询性能,可以考虑进行索引重建。
- 索引重建是一种将索引重新构建的操作,可以消除索引的碎片化问题,提高查询性能。
- 在MySQL中,可以使用
ALTER TABLE
语句配合DROP INDEX
和ADD INDEX
选项来重建索引。但需要注意的是,这个过程可能会暂时锁定表,影响其他查询操作。
手动更新索引以反映数据删除操作在大多数数据库管理系统中(如MySQL、PostgreSQL、SQL Server等)通常不是必要的,因为数据库会自动维护索引的一致性。当你从表中删除数据时,数据库会自动从索引中移除相应的索引项。
然而,在某些情况下,如果索引因为频繁的数据修改(包括插入、更新和删除)而变得碎片化,可能会影响查询性能。此时,你可能想要手动干预索引的维护,包括重建索引或优化索引。虽然这并不直接“更新”索引以反映单个删除操作,但它可以整体上改善索引的性能。
以下是一些手动优化索引的方法,这些方法可以间接地反映数据删除操作对索引的影响:
-
重建索引:
- 使用
ALTER TABLE
语句删除并重新创建索引。这可以消除索引的碎片化,并使其更加紧凑和高效。 - 例如,在MySQL中,你可以使用如下命令来重建索引(假设索引名为
idx_name
,表名为users
):ALTER TABLE users DROP INDEX idx_name; ALTER TABLE users ADD INDEX idx_name(column_name);
- 注意:重建索引可能会暂时锁定表,影响其他查询操作,因此建议在低峰时段进行。
- 使用
-
优化表:
- 使用
OPTIMIZE TABLE
语句来重新组织表的物理存储,包括索引。这可以帮助减少表的碎片,并可能提高查询性能。 - 例如,在MySQL中,你可以使用如下命令来优化表(假设表名为
users
):OPTIMIZE TABLE users;
- 注意:优化表的过程可能需要一些时间,并且也可能暂时锁定表。
- 使用
-
分析表:
- 使用
ANALYZE TABLE
语句来更新表的统计信息,包括索引的使用情况。这有助于数据库优化器生成更高效的查询计划。 - 例如,在MySQL中,你可以使用如下命令来分析表(假设表名为
users
):ANALYZE TABLE users;
- 分析表不会直接影响索引的物理结构,但它可以帮助数据库更好地利用索引。
- 使用
-
定期维护索引:
- 定期检查索引的碎片化程度,并根据需要进行优化或重建。
- 考虑使用数据库管理工具或脚本自动化索引的维护过程。
需要注意的是,手动更新索引以反映单个数据删除操作通常不是必要的,因为数据库会自动处理这种情况。然而,定期维护索引以确保其保持最佳状态是非常重要的,这可以通过上述方法来实现。
此外,如果你确实需要手动干预索引以反映特定的数据更改(尽管这种情况很少见),你可能需要更深入地了解你的数据库管理系统的内部工作原理,并考虑使用更底层的数据库维护命令或工具。然而,在大多数情况下,简单地依赖数据库的自动索引维护功能就足够了。
相关文章:
SQL 索引
一、索引的基本概念 **索引(Index)**是数据库中一种特殊的数据结构,用于帮助数据库管理系统(DBMS)快速访问数据表中的特定信息。索引类似于书籍的目录,可以加快数据检索的速度。 二、索引的作用 提高查询…...
free第一次成功,第二次失败
问题描述: 在一个函数中存在free,第一次进入此函数没有问题,但是第二次出错 strncpy(pdd_all_data[i].sensor_name,white_list[j].dev_name,strlen(pdd_all_data[i].sensor_name)); 上面代码都是使用strncpy不小心导致double free or corrup…...
各种音频处理器
在HiFi(高保真)音频系统中,通常需要使用一些特定类型的音频处理器,以确保音频信号的高保真和优质输出。以下是一些常见的音频处理器类型及其在HiFi系统中的应用: DAC(数模转换器): …...
深度学习探秘:Transformer模型跨框架实现大比拼
深度学习探秘:Transformer模型跨框架实现大比拼 自2017年Transformer模型问世以来,它在自然语言处理(NLP)领域引发了一场革命。其独特的自注意力机制为处理序列数据提供了全新的视角。随着深度学习框架的不断发展,Tra…...
京准电钟:云计算中NTP网络时间服务器的作用是什么?
京准电钟:云计算中NTP网络时间服务器的作用是什么? 京准电钟:云计算中NTP网络时间服务器的作用是什么? NTP是一种用于同步网络中设备时间的协议,广泛用于互联网和局域网中。NTP网络时间服务器则是基于NTP协议构建&…...
Apache中使用CGI
Apache24 使用Visual Studio 2022 // CGI2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <stdio.h> #include <stdlib.h>#include <stdio.h>void main() {//设置HTML语言printf("Content-type:text/html\n\n&q…...
宏任务与微任务对比【前端异步】
目录 简介微任务与宏任务的基本概念宏任务(Macrotasks)微任务(Microtasks)宏任务示例微任务示例微任务与宏任务的执行时序 结论 简介 在JavaScript的异步编程中,理解事件循环(Event Loop)是至关…...
Autogen和LangGraph对比
AutoGen和LangGraph是两种用于构建多代理AI系统的框架,它们各有特点和优势。以下是对这两个框架的详细对比: 共同点 都支持创建多个AI代理进行协作都可以与大语言模型(LLM)集成都允许定义代理之间的交互流程都支持使用工具和外部资源来增强代理能力 AutoGen的特点 灵活的代…...
uniapp vue3微信小程序如何获取dom元素
在网上很多人说可以通过下面两种形式获取到指定dom元素 // 定义ref <div ref"box"></div>//1通过this.$refs获取dom元素 this.$refs.box//2通过ref(null)获取dom元素 let box ref(null)第一种方式在vue2中是可以获取到的,但是在vue3 setup中…...
Mongodb索引使用限制
学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第85篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关…...
阿里云通义千问开源两款语音基座模型分别是SenseVoice和CosyVoice
阿里巴巴近期发布了开源语音大模型项目FunAudioLLM,该项目包含了两个核心模型:SenseVoice和CosyVoice。可以精准多语言识别并且进行语音克隆。 SenseVoice:精准多语言识别与情感辨识 SenseVoice主要致力于高精度多语言语音识别、情感辨识和…...
第11章 规划过程组(二)(11.10制订进度计划)
第11章 规划过程组(二)11.10制订进度计划,在第三版教材第402~404页; 文字图片音频方式 第一个知识点:主要输出 1、进度基准 经过批准的进度模型,只有通过正式的变更控制程序才能进行变更,用作…...
如何在Spring Boot中集成Hibernate
如何在Spring Boot中集成Hibernate 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Spring Boot项目中集成Hibernate。Hibernate是一个广泛…...
Grind 75 | 3. merge two sorted lists
Leetcode 21. 合并两个有序链表 题目链接 思路: 和归并排序中 merge 部分一致 两个指针分别指向 2 个链表头每次选小的那个加入 res 中,对应指针后移一位;重复步骤2,直至一个指针到链表末尾将另一个剩余的全部 copy 到 res 中,链…...
MyBatis(35)如何在 MyBatis 中实现软删除
实现软删除在MyBatis中通常意味着更新数据库记录的某个字段,而不是真正地从数据库中删除记录。这个字段(通常是is_deleted、deleted或status等)被用来标记记录是否被删除。下面我们将详细探讨如何在MyBatis中实现软删除,包括数据库…...
C# 预处理器指令
C# 预处理器指令 概述 C# 预处理器指令是编译器在编译代码之前处理的指令。这些指令用于控制编译过程,包括条件编译、编译指令的定义和取消等。预处理器指令以 # 开头,不包含在代码的执行逻辑中,仅在编译阶段起作用。 常用的预处理器指令 1. #define 和 #undef #define…...
Perl编译器架构:前端与后端的精细分工
🔧 Perl编译器架构:前端与后端的精细分工 Perl作为一种高级、通用的编程语言,其编译器的架构设计对于性能和灵活性至关重要。Perl编译器由前端和后端组成,它们各自承担着不同的职责。本文将深入解析Perl编译器前端和后端的区别&a…...
14-63 剑和诗人37 - 分布式系统中的数据访问设计
在分布式系统中,跨服务和数据库提供统一、可靠的数据访问至关重要,但又极具挑战性。微服务和数据库的拓扑结构为分布、缓存、复制和同步带来了复杂性。 让我们探索有助于解决这些复杂性并简化构建强大、高性能分布式系统的常见数据访问模式。 概述 我们将通过示例介绍…...
大数据基础:Hadoop之MapReduce重点架构原理
文章目录 Hadoop之MapReduce重点架构原理 一、MapReduce概念 二、MapReduce 编程思想 2.1、Map阶段 2.2、Reduce阶段 三、MapReduce处理数据流程 四、MapReduce Shuffle 五、MapReduce注意点 六、MapReduce的三次排序 Hadoop之MapReduce重点架构原理 一、MapReduce概…...
人工智能算法工程师(中级)课程3-sklearn机器学习之数据处理与代码详解
大家好,我是微学AI,今天给大家分享一下人工智能算法工程师(中级)课程3-sklearn机器学习之数据处理与代码详解。 Sklearn(Scikit-learn)是一个基于Python的开源机器学习库,它提供了简单有效的数据挖掘和数据分析工具。Sklearn包含了…...
华为机考真题 -- 螺旋数字矩阵
题目描述: 疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。他发明了一种写法:给出数字 个数 n 和行数 m(0 < n ≤ 999,0 < m ≤ 999),从左上角的 1 开始&#x…...
防御笔记第四天(持续更新)
1.状态检测技术 检测数据包是否符合协议的逻辑顺序;检查是否是逻辑上的首包,只有首包才会创建会话表。 状态检测机制可以选择关闭或则开启 [USG6000V1]firewall session link-state tcp ? check Indicate link state check [USG6000V1]firewall ses…...
HUAWEI VRRP 实验
实验要求:在汇聚交换机上SW1和SW2中实施VRRP以保证终端网关的高可靠性(当某一个网关设备失效时,其他网关设备依旧可以实现业务数据的转发。) 1.在SW1和SW2之间配置链路聚合,以提高带宽速度。 2.PC1 访问远端网络8.8.8.8 ,优先走…...
领取serv00免费虚拟主机
参考 教程地址【免费serv00虚拟机SSH登录搭建网站】 领取地址 领到了 SSH登录要魔法,网页登录不用 轻松搭建自己的静态网站 soulio.serv00.net 网页加载速度还可以。 ...
云开发技术的壁纸小程序源码,无需服务期无需域名
1、本款小程序为云开发版本,不需要服务器域名 2、文件内有图文搭建教程,小白也不用担心不会搭建。 3、本程序反应速度极快,拥有用户投稿、积分系统帮助各位老板更多盈利。 4、独家动态壁纸在线下载,给用户更多的选择 5、最新版套图…...
基于Python的哔哩哔哩数据分析系统设计实现过程,技术使用flask、MySQL、echarts,前端使用Layui
背景和意义 随着互联网和数字媒体行业的快速发展,视频网站作为重要的内容传播平台之一,用户量和内容丰富度呈现爆发式增长。本研究旨在设计并实现一种基于Python的哔哩哔哩数据分析系统,采用Flask框架、MySQL数据库以及echarts数据可视化技术…...
顺序结构 ( 四 ) —— 标准数据类型 【互三互三】
序 C语言提供了丰富的数据类型,本节介绍几种基本的数据类型:整型、实型、字符型。它们都是系统定义的简单数据类型,称为标准数据类型。 整型(integer) 在C语言中,整型类型标识符为int。根据整型变量的取值范…...
科普文:jvm笔记
一、JVM概述# 1. JVM内部结构# 跨语言的平台,只要遵循编译出来的字节码的规范,都可以由JVM运行 虚拟机 系统虚拟机 VMvare 程序虚拟机 JVM JVM结构 HotSpot虚拟机 详细结构图 前端编译器是编译为字节码文件 执行引擎中的JIT Compiler编译器是把字节…...
springboot对象参数赋值变化
java springboot 项目, 通过接口修改Person类 name值, 在别的类中,注入Person类 Resource Person person, 为什么拿不到 接口修改的 name的值,是Person类 不同的对象造成的 吗 参数对象和注入对象区别 Person类&…...
树形结构的一种便捷实现方案
背景 在开发过程中经常需要把平铺的数据结构转为树形的数据结构,例如多级菜单、组织机构等。 实现方案有很多种。 1、可以使用递归查询,但是这样数据一多会导致频繁的多次查询数据库,产生很多额外的IO开销,总体的响应时间会比较…...
北京网站设计与制作/cnzz站长统计工具
最近比较关注学习Python方面的资料和课程,由于Python本身基本都是在Linux下开发,本人windows用习惯了初用Linux各种别扭啊。下面将我在配置Windows环境下的禁言写出来,与大家分享。1.下载与安装Python1.Python官方网址:https://ww…...
闵行做网站费用/清远网站seo
目录 在前面的章节中,我们是通过动态创建子进程(或子线程)来实现并发服务器的。这样做有如下缺点: 动态创建进程(或线程)是比较耗费时间的,这将导致较慢的客户响应。动态创建的子进程…...
海口小程序开发/正规seo关键词排名网络公司
文章目录公共字段自动填充问题分析基本功能实现思路分析代码实现功能测试功能完善思路分析ThreadLocal操作步骤代码实现功能测试思维导图总结新增分类需求分析数据模型前端页面分析代码实现功能测试分类信息分页查询需求分析前端页面分析代码实现功能测试思维导图总结删除分类需…...
网站不用备案/网络营销概述ppt
展开全部在事件方法中再new个新的e68a84e8a2ad3231313335323631343130323136353331333431353361并更新按钮文本再显示,如果只是改变按钮的文本,把actionPerformed方法中的最后注释掉的两句留下,前面全删除就可以了。import java.awt.FlowLayo…...
怎样做网站平台赚钱/网站seo优化外包顾问
使用Typora将其中的图片自动上传云床,并替换链接 文章目录准备工作以Gitee为例使用感受准备工作 下载Typora 下载**typora-plugins-win-img** 安装好Typora [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nwaanekr-1582617480654)(ht…...
h5网站显示的图标怎么做的/市场推广策略
水平有限 有误请指出版本:Percona MySQL 5.7.22对于锁的学习我做了一些输出详细参考如下:https://github.com/gaopengcarl/percona-server-locks-detail-5.7.22.git其中有readme 本文也是一个朋友问我死锁问题。越前 一、问题提出 如下构造方式ÿ…...