OceanBase 复合索引指南
一、 什么是复合索引,与单列索引的区别是什么
1.1 什么是复合索引
复合索引是指在数据库表中由两个或更多列共同构成的索引,也称多列索引。其独特之处在于,它并非仅针对单一列建立索引,而是对多个列的组合进行索引,从而能够依据这些列的值迅速定位和检索数据。在做数据库查询优化时,复合索引能显著提升基于多列条件的查询效率。
1.2 复合索引与单列索引的区别
单列索引仅针对表中的某一列建立,而复合索引则涉及两列或更多列的组合。单列索引适合于仅需依据单一列进行查询的场景,而复合索引则更适用于需要基于多列进行筛选的复杂查询。在查询效率方面,当查询条件涵盖复合索引中的所有列时,复合索引往往能展现出更优越的性能,因为它能够更精确地锁定目标数据。
1.3 复合索引的优势
1. 更高效的查询:当查询条件涉及复合索引中的多列时,数据库系统可以更快地定位到所需的数据行,因为索引是基于多列的组合,减少了数据扫描的范围。
2. 减少索引扫描:对于多列查询,如果使用复合索引,数据库可能只需要扫描一个索引,而无需对每个单独的列创建索引,从而节省存储空间和提高查询速度。
3. 排序优化:在执行涉及复合索引列的ORDER BY或GROUP BY操作时,数据库可以利用索引来直接提供排序结果,避免了额外的排序步骤。
4. 优化连接查询:在涉及多个表的连接查询中,复合索引可以加速匹配过程,尤其是在连接条件涉及多个列时。
值得注意的是,复合索引的优势并不总是绝对的,它的设计需要根据实际的查询模式和数据分布来调整,以确保最佳性能。例如,如果查询通常只涉及复合索引中的一个列,那么单列索引可能更合适,因为复合索引在单列查询时可能不会被充分利用。创建和维护复合索引也会占用额外的存储空间,因此在设计数据库时需要权衡这些因素。
二、 复合索引的创建方法
2.1 创建复合索引的SQL语法
创建复合索引通常使用 CREATE INDEX语句,语法如下:
CREATE INDEX index_name
ON table_name (column1, column2, ...);
这里,index_name是您为复合索引指定的名称,table_name是包含您要索引的列的表的名称,column1, column2, ...是您要组合的列。列的顺序很重要,因为它们决定了索引的排序方式。
例如,如果我们要在 employees表的 first_name和 last_name列上创建一个复合索引,可以这样写:
CREATE INDEX employee_name_index
ON employees (first_name, last_name);
2.2 创建复合索引的注意事项
1. 索引列的选择:选择索引的列应基于查询的频率和列的区分度。高区分度的列(如身份证号)能提供更好的查询性能,而低区分度的列(如性别)可能效果不佳。
2. 列的顺序:列的顺序影响索引的效率。通常,最常用于查询条件或排序的列应放在前面。
3. 索引的维护:复合索引会增加数据库的存储开销,且每次插入、更新或删除数据时,数据库都需要维护索引,这可能导致性能下降。因此,需要在性能和存储空间之间权衡。
4. 全表扫描:如果查询只使用了复合索引的一部分列,那么索引可能无法被有效利用,导致全表扫描。
5. 覆盖索引:如果复合索引包含所有查询需要的列,这种索引被称为覆盖索引,可以显著提高查询性能,因为数据库无需回表获取数据。
2.3 复合索引的创建案例
假设我们有一个 orders表,包含 customer_id、order_date和 total_amount等字段,且经常需要根据 customer_id和 order_date进行查询。创建复合索引的案例如下:
CREATE INDEX orders_customer_order_index
ON orders (customer_id, order_date);
这将创建一个索引,首先按照 customer_id排序,然后在同一 customer_id下按照 order_date排序。这样,当执行如下查询时,数据库可以快速定位到所需数据:
SELECT * FROM orders
WHERE customer_id = '12345'
ORDER BY order_date;
在实际应用中,应根据查询模式和数据分布情况,结合EXPLAIN分析,调整和优化复合索引的结构,以达到最佳的查询性能。
三、复合索引的使用场景
3.1 多列查询条件的情况
在数据库查询中,当涉及多列查询条件时,复合索引能够显著提升查询效率。例如,假设在用户表(users)中,我们有 first_name和 last_name两列,并创建了一个复合索引 (first_name, last_name)。如果查询条件是 first_name='John'和 last_name='Doe',数据库可以直接利用这个复合索引找到匹配的行,因为索引的顺序与查询条件的顺序一致。如果查询条件是 last_name='Doe'而没有 first_name,数据库仍然可以利用索引的部分匹配,虽然可能不如完全匹配效率高,但仍然比没有索引的情况快。
3.2 排序和分组查询的优化
在涉及数据排序和分组时,复合索引同样能发挥关键作用。假设我们有一个订单表(orders),其中包含 customer_id,order_date和 total_amount列,如果我们经常需要按 customer_id分组并按 order_date排序,创建 (customer_id, order_date)的复合索引可以加速这一过程。数据库在进行分组时,会首先通过 customer_id进行快速定位,然后在每个分组内部使用 order_date进行排序,这样可以避免对整个数据集进行全局排序,显著提升查询性能。
3.3 复合索引在连接查询中的应用
在多表连接查询中,复合索引可以优化连接条件的匹配。例如,我们有两个表 employees和 departments,分别有 employee_id和 department_id作为外键。如果经常进行 employees和 departments的连接查询,并且连接条件是 employees.department_id=departments.department_id,在两个表的 department_id列上创建复合索引可以加速连接过程。特别是当连接条件涉及多个列时,创建合适的复合索引能够减少数据扫描的次数,提高连接效率。
如果连接条件涉及到 employees表的其他列,如 employees.position,一个 (department_id, position)的复合索引将更有利于优化连接和筛选操作。在设计复合索引时,应考虑最常出现在连接条件和WHERE子句中的列,以及这些列的查询顺序,以最大化索引的利用率。
四、 复合索引的查询优化
4.1 复合索引在查询中的作用
复合索引在数据库查询中扮演着重要的角色,它能显著提高数据检索的速度。当查询涉及到多个列时,复合索引允许数据库系统快速定位到满足条件的记录。复合索引由多个列组成,这些列的顺序决定了其效能。如果查询条件匹配索引的前几列,数据库可以利用索引进行快速查找,而无需全表扫描。复合索引还可以减少磁盘I/O操作,进一步提升查询性能。
4.2 使用复合索引进行查询优化的方法
4.2.1 选择正确的索引列顺序
复合索引中列的顺序至关重要。通常,最常在查询条件中出现的列或区分度最高的列应放在索引的最前面。区分度高的列能减少索引条目数量,从而提高查询效率。对于连接查询,连接列应优先考虑放入索引中。
4.2.2 避免索引覆盖不足
确保复合索引覆盖查询中所有需要的列。如果查询需要返回索引中没有包含的所有列,数据库将不得不回表获取剩余数据,这会降低性能。因此,创建索引时需谨慎考虑包含哪些列。
4.2.3 避免索引过多
虽然复合索引可以提高查询性能,但过多的索引会增加数据库维护成本,如插入、更新和删除操作。因此,应根据实际查询模式和数据访问模式创建和维护索引。
4.2.4 使用覆盖索引
覆盖索引是指索引包含了查询中所需的所有数据,因此查询可以直接从索引中获取结果,而无需访问数据页,显著提升查询速度。
4.2.5 避免索引失效
注意SQL的某些操作可能导致索引失效,如在索引列上使用函数或表达式。查询条件应直接匹配索引列,以充分利用索引。
4.3 复合索引查询优化的案例
在一家电商公司的订单数据库中,有以下表结构:
· orders表:包含 order_id(主键),customer_id,product_id,order_date等列。
频繁的查询是按 customer_id和 order_date筛选最近的订单。在没有复合索引时,查询可能需要全表扫描。创建 customer_id, order_date的复合索引后,数据库可以快速找到特定客户的最近订单,显著减少查询时间。
另一个案例是,当进行 SELECT customer_id, product_id FROM orders WHERE order_date BETWEEN date1 AND date2查询时,拥有 order_date, customer_id的复合索引可以避免回表,直接从索引中获取结果,提高了查询效率。
在实际应用中,通过分析SQL查询日志,找出最常执行且性能瓶颈较大的查询,针对性地创建复合索引,往往能带来显著的性能提升。定期评估和调整索引策略以适应数据和查询模式的变化,是数据库管理的重要环节。
五、 复合索引的案例分析
5.1 复杂查询条件下复合索引的应用
在复杂的查询场景中,复合索引能够显著提高查询效率。例如,在一个用户订单数据库中,假设我们有一个 orders表,包含 user_id,product_id,order_date等字段,我们经常需要查询特定用户在特定日期范围内的订单。如果只有一个索引在 user_id上,对于查询 WHERE user_id = 123 AND order_date BETWEEN '2022-01-01' AND '2022-12-31',数据库可能需要扫描大量数据,因为无法直接利用索引。但是,如果创建一个复合索引 (user_id, order_date),数据库就能快速定位到符合条件的记录,从而提高查询性能。
5.2 多表连接查询中复合索引的应用
在多表连接查询中,复合索引的作用更加突出。以一个电子商务平台为例,我们可能有一个 customers表和一个 orders表,两者通过 customer_id连接。如果在 customers表上创建一个 (customer_id, name)的复合索引,并在 orders表上创建 (customer_id, order_date)的复合索引,执行如下查询:
SELECT customers.name, orders.order_date
FROM customers
JOIN orders ON customers.customer_id = orders.customer_id
WHERE customers.name = 'John Doe' AND orders.order_date BETWEEN '2022-01-01' AND '2022-12-31'
数据库能够利用这两个复合索引,快速找到匹配的用户和订单,减少I/O操作,提高查询速度。
5.3 复合索引在大数据量查询中的性能表现
在处理大数据量的查询时,复合索引的优势更加明显。以一个社交媒体平台的 posts表为例,表中包含 user_id,post_date,content等字段,数据量达到亿级。在执行如下查询时:
SELECT * FROM posts
WHERE user_id = 123456789 AND post_date BETWEEN '2021-01-01' AND '2021-12-31'
ORDER BY post_date DESC
如果没有复合索引,数据库可能需要全表扫描,然后对结果进行排序,这将消耗大量时间和资源。但如果有一个 (user_id, post_date)的复合索引,数据库可以直接定位到符合条件的记录,并且由于索引已经按 post_date排序,可以避免额外的排序操作,从而显著提升查询性能。
在大数据量的场景下,复合索引能够减少磁盘I/O,加速数据检索,对于提高系统整体的响应时间和用户体验有着至关重要的作用。正确地设计和使用复合索引,是数据库性能优化的重要策略之一。
六、 SQL举例:复合索引的实际应用
6.1 利用复合索引加速复杂条件查询的SQL
-- 示例数据库表:employees
CREATE TABLE employees (
id INT PRIMARY KEY,
department_id INT,
name VARCHAR(50),
salary DECIMAL(10, 2),
hire_date DATE,
INDEX idx_dept_name_salary (department_id, name, salary)
);
-- 原始查询,未使用复合索引
SELECT *
FROM employees
WHERE department_id = 100
AND name LIKE 'Smith%'
AND salary > 50000;
-- 使用复合索引后的查询
SELECT *
FROM employees
WHERE department_id = 100
AND name LIKE 'Smith%'
AND salary > 50000
ORDER BY salary DESC;
在这个例子中,idx_dept_name_salary复合索引包含 department_id,name和 salary三列。由于查询条件和索引列完全匹配,数据库可以直接从索引中获取数据,避免了全表扫描,显著提高了查询效率。
6.2 使用复合索引进行排序和分组查询的SQL
-- 示例数据库表:sales
CREATE TABLE sales (
product_id INT,
store_id INT,
sale_date DATE,
sale_amount DECIMAL(10, 2),
INDEX idx_store_date_amount (store_id, sale_date, sale_amount)
);
-- 原始查询,未使用复合索引
SELECT store_id, SUM(sale_amount)
FROM sales
WHERE sale_date BETWEEN '2020-01-01' AND '2020-12-31'
GROUP BY store_id
ORDER BY SUM(sale_amount) DESC;
-- 使用复合索引后的查询
SELECT store_id, SUM(sale_amount)
FROM sales
WHERE sale_date BETWEEN '2020-01-01' AND '2020-12-31'
GROUP BY store_id
ORDER BY store_id, SUM(sale_amount) DESC;
在 sales表中,idx_store_date_amount复合索引帮助优化了按 store_id分组和按 sale_amount排序的查询。由于 sale_date在查询条件中,数据库可以直接从索引中找到相关数据,同时 store_id在分组和排序中都有用到,使得索引能够提供高效的查询性能。
6.3 复合索引在连接查询中的SQL示例
-- 示例数据库表:orders 和 customers
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
INDEX idx_customer_order (customer_id, order_date)
);
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
name VARCHAR(50)
);
-- 原始连接查询,未使用复合索引
SELECT o.order_id, c.name
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
WHERE o.order_date BETWEEN '2021-01-01' AND '2021-12-31';
-- 使用复合索引后的连接查询
SELECT o.order_id, c.name
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
WHERE o.order_date BETWEEN '2021-01-01' AND '2021-12-31'
ORDER BY o.order_date, o.order_id;
在这个连接查询中,orders表的 idx_customer_order复合索引优化了 customer_id和 order_date的匹配。由于连接条件和索引列完全匹配,数据库可以高效地执行连接操作。order_date和 order_id在 ORDER BY子句中使用,进一步提升了排序的性能。
七、 复合索引的维护与管理
7.1 复合索引的监控与调优
在数据库系统中,监控复合索引的性能是确保数据库高效运行的关键环节。通过监控可以发现索引使用情况,识别潜在的性能瓶颈,并进行相应的优化。
7.1.1 监控工具与指标
使用数据库管理工具,如Oceanbase的监控界面,可以查看索引的查询命中率、扫描次数、使用频率等关键指标。这些数据可以帮助分析索引的效率。
7.1.2 索引分析
定期分析索引的使用情况,查看是否存在未被充分利用或过度使用的复合索引。分析SQL执行计划,找出不使用索引的查询,分析原因并优化SQL语句。
7.1.3 调优策略
· 重新评估索引列的顺序:根据查询模式的变化,可能需要调整复合索引中列的顺序,以更好地匹配查询条件。
· 删除冗余索引:如果存在多个相似的复合索引,考虑合并或删除冗余,以减少维护成本和存储空间。
· 创建覆盖索引:为减少表扫描,可以创建覆盖索引,即包含查询所需所有数据的索引。
7.2 复合索引的重建与删除
7.2.1 重建索引
· 索引碎片:随着数据的增删改,索引可能出现碎片,影响查询性能。定期重建索引可以整理碎片,恢复索引效率。
· 数据结构变化:表结构的调整,如列类型变更,可能需要重建索引以保持一致性。
· 数据量剧增:当数据量显著增加时,重建索引可以优化空间利用率。
7.2.2 删除索引
· 无用索引:如果某个复合索引在实际查询中很少被使用,或者由于业务变化而不再适用,应及时删除,以减少维护开销。
· 冗余索引:当有其他索引可以替代某个复合索引时,删除冗余的复合索引,避免资源浪费。
7.3 复合索引对数据库性能的影响评估
7.3.1 性能测试
通过基准测试和模拟负载,对比使用和不使用复合索引时的查询性能,分析索引带来的性能提升。
7.3.2 资源消耗
评估复合索引的存储空间占用,以及维护索引对写操作的影响,如插入、更新和删除速度的变化。
7.3.3 整体性能平衡
考虑复合索引对整体数据库性能的影响,包括查询性能、写入性能和存储空间。在优化查询速度的要兼顾其他操作的效率和资源使用。
通过以上维护和管理,可以确保复合索引在Oceanbase数据库中发挥其应有的作用,提升系统的整体性能。
八、 复合索引的常见问题与解决方案
8.1 复合索引的无效使用场景
在某些情况下,复合索引可能无法发挥预期的性能提升效果,甚至可能导致查询性能下降。例如:
· 非前导列查询:当查询条件只包含复合索引的非首列时,数据库可能无法使用该索引进行高效的查找。例如,如果你有一个 (last_name, first_name)的复合索引,但查询条件只涉及到 first_name,那么这个索引可能不会被利用。
· 不连续列的范围查询:如果查询条件中涉及复合索引的前几个列,但不是所有列,且中间有范围查询,数据库可能选择全表扫描而非使用索引。
· 非唯一性索引:当复合索引中的某些列存在重复值时,索引的效率会降低,因为数据库需要处理更多的索引条目。
· 索引覆盖不足:如果查询需要返回的列没有完全包含在复合索引中,数据库可能需要回表,这会降低性能。
8.2 复合索引的选择性计算与优化
选择性是衡量索引效率的一个关键因素,它表示索引中不同值的比例。高选择性意味着更多的唯一值,从而更可能减少查询的数据量。
· 计算索引选择性:你可以通过计算索引中不同值的数量除以表的总行数来估计索引的选择性。选择性越高,索引的区分度越大,查询性能通常越好。
· 优化索引列顺序:考虑列的查询频率和选择性,将选择性高且经常出现在查询条件中的列放在复合索引的前面。
· 避免过度选择性:虽然高选择性是理想的,但过度选择性(如时间戳或唯一ID)可能导致索引过大,反而影响性能。在这种情况下,考虑其他优化策略,如分区或分桶。
8.3 复合索引导致的性能瓶颈与解决方法
复合索引在某些情况下可能导致性能问题,如下所示:
· 索引维护成本:复合索引的更新和插入操作通常比单列索引更昂贵,因为需要维护更多的索引条目。
· 索引空间占用:复合索引可能会占用更多的存储空间,尤其是在索引列数多且数据类型大的情况下。
· 索引碎片:频繁的增删改操作可能导致索引碎片,影响查询性能。
解决这些问题的方法包括:
· 定期优化索引:执行索引重建或分析,以减少碎片和保持索引的高效性。
· 合理使用索引:根据查询模式调整索引策略,避免创建不必要的复合索引。
· 分区和分片:对于大数据表,考虑使用分区或分片来降低索引维护成本和提高查询性能。
· 监控和调整:持续监控数据库性能,根据实际运行情况调整索引策略,如添加或删除索引,优化索引顺序等。
记住,每个数据库系统都有其独特的优化工具和策略,应结合具体系统进行调整。
相关文章:
OceanBase 复合索引指南
一、 什么是复合索引,与单列索引的区别是什么 1.1 什么是复合索引 复合索引是指在数据库表中由两个或更多列共同构成的索引,也称多列索引。其独特之处在于,它并非仅针对单一列建立索引,而是对多个列的组合进行索引,从…...
蛋白质大语言模型ESM介绍
ESM(Evolutionary Scale Modeling)是 Meta AI Research 团队开发的一系列用于蛋白质的预训练语言模型。这些模型在蛋白质结构预测、功能预测和蛋白质设计等领域展现出了强大的能力。以下是对 ESM 的详细介绍: 核心特点 大规模预训练:基于大规模蛋白质序列数据进行无监督学…...
回归测试:保障软件质量的重要防线
在软件开发的生命周期中,变更无处不在——新功能添加、缺陷修复、性能优化或代码重构。但每一次变更都可能像投入平静水面的石子,引起意想不到的涟漪效应。这就是回归测试(Regression Testing)存在的意义,它是软件质量保障体系中不可或缺的一…...
51单片机中断
80C51 单片机的中断源及其默认优先级(从高到低): 优先级中断源中断号1️⃣外部中断 0 (INT0)IE0,编号 02️⃣定时器 0 (T0)TF0,编号 13️⃣外部中断 1 (INT…...
Ollama 常见命令速览:本地大模型管理指南
Ollama 常见命令速览:本地大模型管理指南 一、什么是 Ollama? Ollama 是一个轻量级工具,允许用户在本地快速部署和运行大型语言模型(LLM),如 Llama、DeepSeek、CodeLlama 等。其命令行工具设计简洁&#…...
LSPatch官方版:无Root Xposed框架,自由定制手机体验
在Android设备的自定义和优化过程中,Xposed框架一直是一个强大的工具。然而,许多用户因为Root操作的复杂性和风险而望而却步。今天,我们要介绍的 LSPatch官方版,就是这样一款基于LSPosed核心的无Root Xposed框架解决方案。它不仅提…...
星火燎原:大数据时代的Spark技术革命在数字化浪潮席卷全球的今天,海量数据如同奔涌不息的洪流,传统的数据处理方式已难以满足实时、高效的需求。
星火燎原:大数据时代的Spark技术革命 在数字化浪潮席卷全球的今天,海量数据如同奔涌不息的洪流,传统的数据处理方式已难以满足实时、高效的需求。Apache Spark作为大数据领域的璀璨明星,凭借其卓越的性能和强大的功能,…...
Spark-Streaming(三)
一. kafka和flume的整合 任务需求一:利用flume监控某目录中新生成的文件,将监控到的变更数据发送给kafka,kafka将收到的数据打印到控制台 1. 在flume/conf/目录下添加flume-kafka.conf文件 配置文件如下 2. 启动flume和kafka消费者 3. 传入数据 查看fl…...
深入了解C# List集合及两种常见排序算法:插入排序与堆排序
在C#中,List<T> 是一种常用的集合类型,它提供了对动态数组的灵活操作,能够方便地添加、删除和访问元素。而排序算法是计算机科学中非常重要的部分,插入排序和堆排序是两种经典的排序方法。本文将详细讲解C#中 List<T>…...
【软件设计师】模拟题三
以下是另外10道不重复的软考-软件设计师模拟试题,答案及解析统一放在最后: 试题部分 在软件工程中,敏捷开发(Agile Development)的核心实践之一是? A. 严格的文档编写 B. 基于里程碑的计划…...
什么是CN2专线?全面解析中国电信的高性能网络服务
一、CN2专线的定义 CN2专线(China Telecom Next Carrier Network)是中国电信推出的新一代高性能网络专线服务,旨在满足企业对高速、稳定、安全网络连接的深度需求。它基于优化的网络架构设计,通过分布式路由、多路径传输等技术&a…...
5.4 AgentLite:轻量级库,便于构建任务导向的LLM Agent系统
AgentLite 是一个轻量级、模块化设计的开源框架,专注于构建任务导向的基于大语言模型(LLM)的智能代理(Agent)系统。与其他功能丰富但较为复杂的框架(如 LangChain 或 AutoGen)相比,A…...
shell脚本3
for语句(一种循环控制结构,用于遍历列表或者范围内的元素,并对每个元素执行一段代码语法格式 for 变量名 in 取值列表 do 命令序列 done 入门示例: for i in 1 2 3 4 5 6 # for i in {1..6} 或 for i in …...
Kafka Tool(Offset Explorer)国内下载: Kafka可视化连接工具
Kafka Tool(现称为 Offset Explorer)是一款专为 Apache Kafka 集群设计的可视化连接客户端工具,主要用于消息的可视化浏览、消费者偏移量的管理、主题的管理以及数据的实时监控。作为一款商用软件,它以其直观的用户界面和强大的功…...
【JAVA】高并发场景下,如何保证数据的一致性和系统的稳定性?
数据一致性 数据库事务:使用数据库的事务机制,确保一组数据的相关操作要么全部成功,要么全部失败,从而保证数据的一致性。例如,在转账操作中,涉及到转出账户扣款和转入账户加款两个操作,这两个…...
【Linux篇】理解信号:如何通过信号让程序听从操作系统的指令
信号的悄然到来:当操作系统发出‘警告’时 一.信号1.1 基本概念1.2 产生信号方式1.2.1 键盘产生信号1.2.2 系统调用产生信号1.2.2.1 kill1.2.2.2 raise1.2.2.3 abort 1.2.3 调用系统命令1.2.4 异常1.2.5 软件条件产生信号1.2.5.1 pause1.2.5.2 alarm 二. 最后 信号的…...
统计服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
文章目录 一、背景二、说明三、页面四、代码前端MonitorServiceProcessPage.vueMonitorServiceProcessTable.vueMonitorServiceProcessTableButton.vueaddMonitorTask.vueproductOperation.vueshowMonitorTask.vueMonitorSystemLog.vueMonitorTask.vueMonitorTaskLog.vueRealti…...
WSL 安装过程整理
WSL 安装过程整理 一、WSL 安装教程二、安装后小技巧1、安装位置2、常用命令 三、在 WSL2 中安装 perf: 一、WSL 安装教程 史上最全的WSL安装教程 WSL2 最新最全帮助小白一步步详细安装教程 在WSL2 root 和普通用户的切换 轻松搬迁!教你如何将WSL从C盘迁…...
纯CSS吃豆人(JS仅控制进度)
一、效果展示 二、源码 html <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Pac-Man SVG Demo…...
redis 数据类型新手练习系列——Hash类型
redis 数据类型 Redis 主要支持以下几种数据类型: (1)string(字符串): 基本的数据存储单元,可以存储字符串、整数或者浮点数。 (2)hash(哈希):一个键值对集…...
如何使用@KafkaListener实现从nacos中动态获取监听的topic
1、简介 对于经常需要变更kafka主题的场景,为了实现动态监听topic的功能,可以使用以下方式。 2、使用步骤 2.1、添加依赖 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactI…...
区块链如何达成共识:PoW/PoS/DPoS的原理、争议与适用场景全解
引言 区块链技术的核心在于去中心化网络中的信任机制,而共识算法是实现这一目标的关键。不同的共识机制在效率、安全性、去中心化程度等方面各有取舍。本文将深入解析三种主流共识机制——工作量证明(PoW)、权益证明&am…...
Oracle for Linux安装和配置(11)——Oracle安装和配置
11.3. Oracle安装和配置 Linux上Oracle的安装及配置与Windows上差不多,只是安装软件的准备等有所不同,下面只对不同于Windows的部分进行较为详细的讲解,其他类似部分不再赘述。另外,无论选择使用虚机还是物理机,Oracle安装、配置和使用等方面几乎都是完全一样的。 11.3.…...
http协议详解附带c/c++服务器和客户端源码
http详解 代码部分HTTP请求结构示例HTTP客户端实现(使用Linux系统调用)简易HTTP服务器实现 深入解析HTTP协议:从基础到实践1. HTTP协议核心概念1.1 协议本质解读1.2 通信模型详解 2. 抓包分析实战2.1 Fiddler工具妙用2.2 报文结构拆解 3. 请求…...
JavaScript性能优化实战(5):数据结构与算法性能优化
JavaScript中常用数据结构性能对比 数据结构的选择对JavaScript应用的性能有着决定性的影响。不同的数据结构在不同操作上各有优劣,选择合适的数据结构能显著提升应用性能。本节将对JavaScript中常用的数据结构进行全面的性能对比分析。 基本数据结构时间复杂度概览 首先,…...
uniapp小程序开发入门01-快速搭建一个空白的项目并预览它
uniapp小程序开发入门01-快速搭建一个空白的项目并预览它!由于近期有市场需求和计划,构建一套自己的小程序,所以再次带领大家系统的过一遍,如何使用uniapp程序快速构建一套完整的项目。今天是第一小节,带领大家快速构建…...
UR5 UR5e机器人URDF文件
URDF全称为Unified Robot Description Format,中文可以翻译为“统一机器人描述格式”。与计算机文件中的.txt文本格式、.jpg图像格式等类似,URDF是一种基于XML规范、用于描述机器人结构的格式。根据该格式的设计者所言,设计这一格式的目的在于提供一种尽可能通用(as genera…...
ubuntu20.04安装x11vnc远程桌面
x11vnc是一个VNC服务器, 安装后我们可以不依赖外部的显示设备, 通过网络远程登录ubuntu桌面。 安装x11vnc sudo apt-get install x11vnc 设置VNC登录密码 sudo x11vnc -storepasswd /etc/x11vnc.pwd 设置x11vnc在开机时自动启动 新建如下文件: sudo vi /lib/systemd/sys…...
AKM旭化成微电子全新推出能量收集IC“AP4413系列”
旭化成微电子开始批量生产用于环保发电的电荷控制集成电路!优化充电电池的充放电,广泛应用于智能遥控器和蓝牙TMTag等设备。 01 概述 旭化成微电子株式会社(AKM)开发出面向小型二次电池(充电电池)的环境…...
机器人行业研究系列报告
新质生产力系列报告:2024年人形机器人核心场景发展洞察研究报告 具身机器人行业现状及未来趋势分析 2025 2025年人形机器人投资策略,量产元年,全球共振,百家争鸣 人形机器人行业深度报告(一):…...
利用JMeter代理服务器方式实现高效压测
前言 在当今快节奏的互联网时代,确保Web应用和服务能够在高负载下稳定运行变得至关重要。无论是电子商务平台、社交媒体网络还是在线教育服务,用户对网站响应速度和稳定性的期望从未如此之高。因此,性能测试不再是一个可选项,而是…...
NLP高频面试题(五十五)——DeepSeek系列概览与发展背景
大型模型浪潮背景 近年来,大型语言模型(Large Language Model, LLM)领域发展迅猛,从GPT-3等超大规模模型的崛起到ChatGPT的横空出世,再到GPT-4的问世,模型参数规模和训练数据量呈指数级增长。以GPT-3为例,参数高达1750亿,在570GB文本数据上训练,显示出模型规模、数据…...
2015-2023 各省 GDP 数据,用QuickBI 进行数据可视化——堆叠图!
嘿,数据爱好者们!今天咱要来一场刺激的数据冒险,深入剖析全国各省的 GDP 数据,而且会借助强大的 QuickBI 工具,用超酷炫的堆叠图让这些数据 “活” 起来,带你一眼看清经济格局! 地址࿱…...
MySQL优化(持续更新)笔记
一、insert优化 : 之前:项目通常是一条insert一条的执行,每一次都需要与MySQL进行建立连接进行网络传输,效率很低 现在: 1.- 批量插入(一条sql就行,一次500-1000) 可以与MyBatis…...
MySQL表的操作 -- 表的增删改查
目录 1. 表的创建2. 表的查看3. 表的修改4. 表的删除5. 总结 1. 表的创建 1.查看字符集及效验规则 2. 表的创建 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;创建用户表1 创建用…...
Java 数组:深度解析
前言 数组作为Java中最基础也是最强大的数据结构之一,其高效性和灵活性在性能关键型应用中无可替代。本文将从进阶使用开始,逐步深入探索Java数组的高级特性和大师级技巧,帮助开发者全面掌握数组技术的精髓。 一、数组基础回顾与性能特性 1.1 数组基本特性对比 特性Java数…...
【基于Qt的QQMusic项目演示第一章】从界面交互到核心功能实现
🌹 作者: 云小逸 🤟 个人主页: 云小逸的主页 🤟 motto: 要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前,其次就是现在&…...
[Mybatis-plus]
简介 MyBatis-Plus (简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变。Mybatis-plus官网地址 注意,在引入了mybatis-plus之后,不要再额外引入mybatis和mybatis-spring,避免因为版本…...
【EDA】EDA中聚类(Clustering)和划分(Partitioning)的应用场景
在VLSI物理设计自动化中,聚类(Clustering)和划分(Partitioning)是两个互补但目标和应用场景截然不同的关键步骤,其核心区别如下: 一、应用阶段与核心目标 1. 聚类(Clustering&…...
PySide与PyQt对比:为何PySide是更优选择
PySide与PyQt对比:为何PySide是更优选择 引言 在Python桌面应用开发领域,Qt框架的绑定库一直是首选方案。两大主要选择—PySide和PyQt,虽然功能相似,但在许可证、性能和支持方面存在显著差异。本文将深入探讨为何PySide通常是更…...
LVGL移植高通矢量字库GT5SLAD3BFA
字库芯片: GT5SLAD3BFA MCU: STM32F429 LVGL版本:V8.4 一,实现gt_read_data() gt_read_data()函数的作用:与字库flash进行通信,函数的定义里调用spi发送数据和接收数据的接口。用户只需要实现该函数,就可以…...
7.0 sharpScada的sql数据的安装
本文介绍开源库SharpScada的配置过程。 1,还原数据库 2.打开SQL server2014配置启动器,并启用Named Pipes,以及TCP/IP 3.启动SQL Server服务中的SQL Server Browser 4.允许远程连接...
杂项知识点
杂项 1 激活函数1.1 sigmoid1.2 tanh1.3 Relu1.4 leakRelu 1 激活函数 常用的激活函数包括sigmoid tanh Relu leakRelu 1.1 sigmoid import torch import numpy as np import matplotlib.pyplot as plt # sigmoid tanh Relu leakRelu ## 1 sigmoid ### 1.1 代码复现sig…...
Android项目升级插件到kotlin 2.1.0后混淆网络请求异常
背景 项目kt插件1.9.24升级到2.1.0后打包编译release网络请求失败了。 retrofit版本2.9.0 错误详情 java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedTypeat retrofit2.m.a(Unknown Source:2477)at retrofit2.K.invoke(U…...
uniapp 仿企微左边公司切换页
示例代码: <template><view class"container"><!-- 遮罩层 --><view class"mask" v-if"showSidebar" click"closeSidebar"></view><!-- 侧边栏 --><view class"sidebar"…...
Milvus(7):Schema、主字段和自动识别
1 Schema Schema 定义了 Collections 的数据结构。在创建一个 Collection 之前,你需要设计出它的 Schema。本页将帮助你理解 Collections 模式,并自行设计一个示例模式。 在 Zilliz Cloud 上,Collection Schema 是关系数据库中一个表的组合&a…...
Liunx服务上MySQL服务导致CPU炸了,使用kill -9 mysqld进程id后,无法启动MySQL
1.top命令后,可以看到mysqld沾满了cpu 2.然后我使用了kill -9 16594,杀死了mysqld进程 3.之后,查看mysql服务状态,发现对应的 www/serve/mysqld 目录不存在 sudo systemctl status mysqld4.使用命令查看操作 www/serve 目录的历…...
Java使用IText7动态生成带审批文本框的PDF文档
Java使用IText7动态生成带审批文本框的PDF文档 文章目录 Java使用IText7动态生成带审批文本框的PDF文档1.构建第一个框的起始坐标2.渲染第一个框3.渲染其他的审批框 测试结果示例 实现思路 使用Canvas进行相对定位和绝对定位来确定文本框内文字位置,用Rectangle通…...
【音视频】AVIO输入模式
内存IO模式 AVIOContext *avio_alloc_context( unsigned char *buffer, int buffer_size, int write_flag, void *opaque, int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), int64_t (*seek)(…...
Android中的多线程
线程池 在编程中经常会使用线程来异步处理任务,但是每个线程的创建和销毁都需要一定的开销。如果每次执行一个任务都需要开一个新线程去执行,则这些线程的创建和销毁将消耗大量的资源。并且线程都是“各自为政”,很难对其进行控制,…...