-
事务处理上方面MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。InnoDB:提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。锁级别MyISAM:只支持表级锁,用户在操作MyISAM表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。InnoDB:支持事务和行级锁,是innodb的最大特色。行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。
-
作者:饶珑辉 华为云数据库内核专家 近期,华为云数据库团队推出了专家技术解读系列,该系列基于GaussDB产品,每期围绕1个核心技术点进行深度剖析。上期由华为瑞典研究所数据库Lab首席科学家吕漫漪女士解读《GaussDB(for MySQL)云栈垂直集成的力量有多大?》,本期将由华为云数据库内核专家饶珑辉针对吕漫漪文章中介绍的GaussDB(for MySQL)关键特性之“并行查询”(PQ: Parallel Query)进行详细解读。 一般来讲,数据库有两个非常广泛的应用场景,分别是“事务处理”和“查询分析”。开源MySQL作为国内使用最多的关系型数据库之一,很早在5.1版本就开始支持事务处理的场景。随着技术演进,开源MySQL在版本更新迭代过程中不但持续增强事务处理能力,并且最新的MySQL 8.0版本已经开始支持许多查询分析型的特性,比如Window function、CTE、Hash Join、列直方图、并行COUNT计算等等。 华为云GaussDB(for MySQL) 作为华为最新一代高性能企业级分布式关系型数据库,根植MySQL开源社区,不但继承了开源的所有查询分析特性,还面向企业级应用查询负载开发了许多增强特性,如并行查询、查询计算下推(NDP: Near Data Processing)等等。 在传统数据解决方案中,“事务处理”和“查询分析”分别放在不同类型的库上完成,这是因为事务处理以数据增、删、改,以及小数据查询为主,更加注重实时响应、高吞吐和事务性要求。而“查询分析”以大数据量复杂计算为主,更加注重数据容量扩展性、复杂计算能力等。下图展示的是传统数据解决方案:OLTP数据库满足在线事务处理需求,OLAP数据仓库满足分析型查询需求。 客户需要什么样的数据库? 当前业界对数据库的普遍需求是:实时响应、高吞吐、满足事务性、良好的扩展性以及支持复杂查询。这对于使用者而言有很多好处:首先是降低部署成本,用户只需要部署一套数据库集群即可;其次是解决了数据迁移时延的问题,更新和查询运行在同一套集群中;还有就是支持事务性查询,满足一致性、原则性、隔离性和持久性要求,查询结果会更加准确。 针对用户需求,华为云原生数据库GaussDB(for MySQL)通过技术创新,具备了同时满足事务处理和查询分析的能力。GaussDB(for MySQL)是一款100%兼容MySQL语法的OLTP事务关系型数据库,架构上采用了计算和存储分离的设计,计算资源和存储资源可以分别进行独立在线扩展。存储层使用了华为自研分布式存储系统DFV(数据功能虚拟化: Data Function Virtualisation),最大可以扩展到128TB容量,单个计算节点最大规格可支持64核CPU,512G的内存容量,最多可以支持1个写节点和15个只读节点。 除了强大的资源扩展能力,GaussDB(for MySQL)针对事务处理和查询分析分别作了优化,极大增强了事务读写和查询分析的能力。本文将重点介绍增强的查询分析能力之一:并行查询。 查询分析提升之道:释放CPU多核计算资源 众所周知,软件计算能力的提升一方面得益于CPU硬件能力的增强,另一方面也得益于软件设计层面能够充分利用CPU的计算资源。当前处理器普遍采用多核设计,如GaussDB(for MySQL)单个节点最多可以支持64核的CPU。单线程查询的方式至多能用满一个核的CPU资源,性能提升程度有限,远远无法满足企业大数据量查询场景下对降低时延的要求。因此,复杂的查询分析型计算过程必须考虑充分利用CPU的多核计算资源,让多个核参与到并行计算任务中才能大幅度提升查询计算的处理效率。 下图是使用CPU多核资源并行计算一个表的count(*)过程的例子:表数据进行切块后分发给多个核进行并行计算,每个核计算部分数据得到一个中间count(*)结果,并在最后阶段将所有中间结果进行聚合得到最终结果。 GaussDB(for MySQL)查询分析提升秘笈:并行查询 GaussDB(for MySQL)支持并行执行的查询方式,用于降低分析型查询场景的处理时间,满足企业级应用对查询低时延的要求。如前面所述,并行查询的基本实现原理是将查询任务进行切分并分发到多个CPU核上进行计算,充分利用CPU的多核计算资源来缩短查询时间。并行查询的性能提升倍数,理论上与CPU的核数正相关,就是说并行度越高能够使用的CPU核数就越多,性能提升的倍数也就越高。 下图展示的是:在GaussDB(for MySQL)的64U实例上查询100G数据量的COUNT(*)查询耗时,不同的查询并发度分别对应不同耗时,并发度越高对应的查询耗时越短。 GaussDB(for MySQL)支持多种类型的并行查询算子,以满足客户各种不同复杂查询场景。当前最新版本(2021-9)已经支持的并行查询场景包括:主键查询、二级索引查询主键扫描、索引扫描、范围扫描、索引等值查询,索引逆向查询并行条件过滤(where/having)、投影计算并行多表JOIN(包括HashJoin、NestLoopJoin、SemiJoin等)查询并行聚合函数运算,包括SUM/AVG/COUNT/BIT_AND/BIT_OR/BIT_XOR等并行表达式运算,包括算术运算、逻辑运算、一般函数运算及混合运算等并行分组group by、排序order by、limit/offset、distinct运算并行UNION、子查询、视图查询并行分区表查询并行查询支持的数据类型包括:整型、字符型、时间类型、浮点型等等其他查询 下图是GaussDB(for MySQL)并行查询针对TPC-H的22条查询场景所做的性能测试结果,测试数据量为100G,并发线程数据是32。下图展示了并行查询相比传统MySQL单线程查询的性能提升情况:32并行执行下,单表复杂查询最高提升26倍性能,普遍提升20+倍性能。多表JOIN复杂查询最高提升近27倍性能,普遍提升10+倍性能。子查询性能也有较大提升。 总而言之,GaussDB(for MySQL)并行查询充分调用了CPU的多核计算资源,极大降低了分析型查询场景的处理时间,大幅度提升了数据库性能,可以很好的满足客户多种复杂查询场景的低时延要求。目前,GaussDB(for MySQL)并行查询功能已经全网上线,更多并行查询场景正在不断解锁中,欢迎大家前往华为云官网体验: https://www.huaweicloud.com/product/gaussdb_mysql.html Ps:看完觉得还不过瘾?下期将由我们另一位专家为大家带来GaussDB(for MySQL) “并行DDL” 技术解读,更多精彩,敬请期待! 华为将于2021年9月23-25日在上海世博中心&世博展览馆举办华为全联接2021,以“深耕数字化”为主题,汇聚业界思想领袖、商业精英、技术大咖、先锋企业、生态伙伴、应用服务商以及开发者等各方,探讨如何深入行业场景,把数字技术与行业知识深度结合,真正融入政企的主业务流程,解决核心业务问题,催生体验提升、效率提升以及模式创新;并发布场景化的产品与解决方案,分享客户伙伴的最新成果与实践,构筑开放共赢的健康生态。 了解更多信息,请访问官网www.huawei.com/hc2021
-
1.InnoDB支持事务,MyISAM不支持, 这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了。2.MyISAM适合查询以及插入为主的应用。3.InnoDB适合频繁修改以及涉及到安全性较高的应用。4.InnoDB支持外键,MyISAM不支持。5.从MySQL5.5.5以后,InnoDB是默认引擎。6.InnoDB不支持FULLTEXT类型的索引。7.InnoDB中不保存表的行数,如select count() from table时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count()语句包含where条件时MyISAM也需要扫描整个表。8.对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引。9.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的 删除,效率非常慢。MyISAM则会重建表。10.InnoDB支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like '%lee%'。
-
目前,第七届中国国际“互联网+”大学生创新创业大赛火热报名中,为了帮助参赛者更好了解赛题设计思路和命题方向,华为云产业命题赛道举行了线上直播解读,华为云数据库资深架构师苏斌在直播间详细解读了GaussDB命题赛道攻略,通过剖析数据库关键技术和赛题考点,助力参赛选手轻松拿高分。数据库是什么?谈及数据库,可能有很多小伙伴不太了解,简单来说,数据库是存取和管理数据的软件(在生活中可以形象的类比为“大仓库”、“电子文件柜”等等)。当今世界是一个信息爆炸的时代,充斥着大量数据,我们的衣食住行,生活的方方面面都与数据有了不可分割的关系。为了满足各种类型的数据特点与爆炸式的数据增长与存储管理压力,社会催生了多种类型数据库的蓬勃发展,很多关键的数据库新技术,例如分布式、云原生等也应运而生。这类数据库相比传统数据库性能更强,可靠性更强,扩展性更强,容量更大,有了这类数据库,数据读取/存储速度更快了,时延更低了,应对故障场景更从容了,面对大流量洪峰再也不怕了……说到云原生分布式数据库的典型代表,华为云GaussDB(for MySQL)必须榜上有名。作为华为云GaussDB数据库的当家花旦,GaussDB(for MySQL) 100%兼容MySQL语法,是华为最新一代高性能企业级分布式关系型数据库。它基于华为最新一代DFV分布式存储,采用计算存储分离架构,最高支持128TB的海量存储,可实现超百万级QPS吞吐,支持跨AZ部署,数据0丢失,既拥有商业数据库的性能和可靠性,又具备开源数据库的灵活性。为了让开发者深入了解数据库技术,并用相关技术解决企业实际业务问题,本届“互联网+”大赛的产业命题赛道·华为云GaussDB命题推出了相关题目:基于GaussDB(for MySQL)实现高性能、高扩展性的bufferpool(缓冲池)。赛题解读:抢先掌握bufferpool(缓冲池)原理及技术,应战更从容数据库系统一般都会有一个Buffer Pool(缓冲池),用于将一些频繁访问的热点数据从磁盘读到缓存中,避免我们在数据库中读取或者写入数据时对慢速磁盘设备进行频繁访问,从而加快数据的访问速度,提升数据库的性能。本赛道赛题就是希望选手能借鉴并参考GaussDB(for MySQL)的设计理念和思路,实现一个高性能、高扩展性的Buffer Pool。比赛分为三个阶段,1)实现一个基本功能的Buffer Pool, 能够缓存固定大小(16K)的一些热点数据,需要保证从缓存中读取和写入数据的正确性。2)在保证正确性的前提下,使用LRU、LFU和LRU-K等淘汰算法及其变种,提升Buffer Pool 的命中率,从而提高热点数据访问速度。3)在云化场景下,为了提高资源利用率,会多种数据库共用同一存储资源池,每种数据库有不同的page size(页面大小), Buffer Pool需要有高扩展性,能够支持同时缓存各种page size(page size 固定为8KB、16KB、32KB和2MB)的数据。这里科普下赛题中的相关概念:Page:Page是数据库中磁盘和内存交换的基本单位,也是数据库管理磁盘空间的基本单位。比如MySQL中默认的page大小为16K,PostgreSQL page为8K。Data manager:数据管理器,用于管理数据的读取和写入。Meta manager:元数据管理器,用于管理page在内存中的信息。答题指南8月31日报名结束后(在互联网+大赛官网和华为云平台均需报名),提交作品入口正式对外开放,请参考赛事组提供的DEMO,该DEMO包含评测程序及简单Buffer Pool实现,请在此基础上完成Buffer Pool的代码编写与编译,并在平台上传参赛作品,获取评测分数与结果。赛题组针对C++语言提供了log4cxx日志组件,详情参见赛题组DEMO,Java/Python等语言请使用常用的日志组件。作品运行反馈界面同时也提供日志下载,同时请避免打印过多的日志。为了充分保证比赛的公平性,参赛选手不得使用第三方存储引擎库(如RocksDB、LevelDB、LMDB等),在其之上封装接口用来参赛;不得依赖第三方动态库,以免导致程序在评测环境不能运行;参赛程序初始化需在3分钟内完成,关闭需在10分钟内完成,测试需在30分钟内完成。 什么样的作品容易拿高分?如果想完成高质量作品在大赛中“一骑绝尘”,那么你可能还需要了解比赛的评分逻辑,每个作品的测评分为两个阶段,包括正确性评测和性能评测。正确性评测阶段,评测程序会进行纯读和读写混合测试。测试系统会随机对所有数据页面进行访问,访问包括读和写。对读取的页面,会对该页面进行正确性验证,页面验证不通过测试将结束,且测试不得分。对写入的页面,该页面可能在后续被再次访问,并进行正确性验证;同时当评测程序完成运行测试后,将发送信号关闭参赛程序,参赛程序需持久化尚未持久化的页面数据,评测程序将进行页面正确性验证。如果验证不通过,测试将结束,且测试不得分。只有通过正确性评测阶段,才会进入性能评测阶段。性能评测的评测模型会有多种,评测参数参考如下:在正确性验证通过的情况下,对每个不同评测模型的测试阶段整体计时,如果该阶段的正确检测全部通过,则成绩有效,根据总用时从低到高进行排名(用时越短排名越靠前)。评测程序将根据评测模型对参赛程序进行测试,计时从发送第一个请求开始,最后一个请求完成结束,最终计时为各项测试模型的测试阶段耗时之和。最后再次提醒大家,本次“互联网+”大赛GaussDB赛道的时间安排:报名和时间截止到8月31日,初/复赛截止9月30日,预计10月中下旬举行全国总决赛。点击链接进入大赛页面报名:戳它报名。想要了解更多赛题详解,欢迎观看GaussDB命题解读直播回顾:回顾链接。
-
MySQL默认的事务隔离级别为repeatable-readMySQL 支持 4 中事务隔离级别.事务的隔离级别要得到底层数据库引擎的支持, 而不是应用程序或者框架的支持.Oracle 支持的 2 种事务隔离级别:READ_COMMITED , SERIALIZABLESQL规范所规定的标准,不同的数据库具体的实现可能会有些差异MySQL中默认事务隔离级别是“可重复读”时并不会锁住读取到的行事务隔离级别:未提交读时,写数据只会锁住相应的行。事务隔离级别为:可重复读时,写数据会锁住整张表。事务隔离级别为:串行化时,读写数据都会锁住整张表。隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大,鱼和熊掌不可兼得啊。对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为Read Committed,它能够避免脏读取,而且具有较好的并发性能。尽管它会导致不可重复读、幻读这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。
-
事务的并发问题1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果因此本事务先后两次读到的数据结果会不一致。3、幻读:幻读解决了不重复读,保证了同一个事务里,查询的结果都是事务开始时的状态(一致性)。例如:事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作 这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。 而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有跟没有修改一样,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表。事务的隔离读未提交:另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据脏读不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果因此本事务先后两次读到的数据结果会不一致。可重复读:在同一个事务里,SELECT的结果是事务开始时时间点的状态,因此,同样的SELECT操作读到的结果会是一致的。但是,会有幻读现象串行化:最高的隔离级别,在这个隔离级别下,不会产生任何异常。并发的事务,就像事务是在一个个按照顺序执行一样
-
编译调试插件是鲲鹏开发框架的一个子工具。编译调试插件即插即用,支持一键安装服务器鲲鹏编译器,支持单机下Nvidia GPU应用调试能力,通过统一调试界面调试GPU应用,实现cuda-gdb调试能力,以及鲲鹏平台远程调试能力,支持的功能特性如下:一键式部署支持从Visual Studio Marketplace下载并在线安装插件,同时支持一键部署服务端GCC for openEuler、毕昇编译器和毕昇JDK编译调试一键式安装GCC for openEuler、毕昇编译器和毕昇JDK可视化编译配置任务,一键式任务运行远程单步调试C/C++代码编译调试过程信息实时展示gtest框架用例树渲染及状态展示CUDA程序调试一键式安装部署工具调试信息实时交互
-
项目列表里要展示项目属性的内容,要怎么查询更好呢?先查出来项目列表,然后再循环单个查询项目属性列表,还是把项目ID获取后通过In在属性列表查出来再进行循环匹配好?
-
mysql的多字段like优化有什么好办法没?比如用户模糊查找,需要like 姓名,昵称,手机号,备注,地址之类的,怎么样优化效率能高一点呢?
-
作者:吕漫漪 华为瑞典研究所数据库Lab首席科学家如今云计算越来越普及,云堆栈作为云计算的重要服务模式,其关键组件之一是事务数据库服务。在实际业务场景中,应用程序依赖于可扩展、高性能的托管数据库服务,以充分受益于云平台。而云数据库也需要高效利用底层云基础架构,以释放云规模运营的潜力。华为云GaussDB(for MySQL)是华为基于新一代DFV(全称Data Function Virtualisation,数据功能虚拟化)分布式存储,采用计算存储分离架构,完全兼容MySQL的高性能企业级云原生分布式数据库,以全托管服务形式为互联网和企业客户提供专业服务。在本文中,我将解释常见的客户工作负载,以及我们如何利用华为云计算堆栈的独特能力来处理这种工作负载。谁是云上的客户?他们的工作负载是什么?在国内,人们通常认为只有互联网初创企业才会使用云平台,而MySQL由于在互联网公司中广受欢迎,得到众多国内企业的青睐。但实际上,企业多年前就已经开始拥抱云概念,并在不断深入发展中,这也是中国当前的趋势。MySQL作为世界上最流行的开源数据库,在所有行业和互联网公司中都被广泛采用。那么,云数据库客户的典型工作负载是什么?我们观察到的两个特点是:1)数据量越来越大。从一开始就有几TB到几十TB的数据量,而且随着时间的推移,数据量会越来越大。2)简单的插入/删除/更新/点查和复杂的分析查询的混合。此外,偶尔也会有DDL操作。目前客户面临一个很大挑战,即如何在数据量大的情况下提升数据库性能。客户希望在复杂查询的同时,保持核心事务工作负载的吞吐量。因为企业的业务逻辑性质,查询通常会比较复杂。幸运的是,MySQL 8.0添加了期待已久的分析行SQL支持,例如windowing function和递归CTE。对于非结构化数据,MySQL的JSON支持已经非常受欢迎。GaussDB(for MySQL)架构概述GaussDB(for MySQL)的架构构建在多租户共享的分布式存储系统之上,目前一个数据库的最大数据量为128TB,一个主节点用于读写负载,最多15个只读节点用于读负载。SQL引擎是一个经过深度修改的MySQL 8.0,因此在语法和语义方面与MySQL 100% 兼容。计算节点和存储之间用RDMA网络。GaussDB(for MySQL)服务使用的存储系统是一种高可靠的跨AZ云存储。在公有云上,存储系统可以是一个有几十或数百个节点的大型群集,横向扩展能力比单租户线下方案高很多倍。SQL节点将redo log写到存储层,页面在存储层materialize,此设计显著减少了更新密集型工作负载的网络通信。属于单个数据库的页面以slice形式组织,slices分布在多个存储节点上,这个数据分布是就是分布式查询的基础。华为云GaussDB(for MySQL)架构图华为独特优势:垂直集成与传统的线下数据库不同,云数据库有垂直集成云栈中所有层的能力。华为作为在云栈各层领先的提供商,在云领域中有着独特的地位,有能力成为行业的领导者。云栈中最接近数据库的是存储,线下纯软数据库需要与通用型存储以及标准文件系统配合使用,在垂直集成方面,几乎没有优化空间。但在云上,存储和数据库的集成能发挥更大的作用,因为云存储在存储节点方面的可扩展性很强,并允许客户根据数据量和负载动态扩展。由于云存储是多租户之间共享,而且并非所有租户都会每时每刻有大型扫描,因此我们可以将部分查询处理卸载到存储层,以实现更高的资源利用率。通过并行提高性能(并行查询:PQ)提高性能的一个通用方法是并行,并行可以在多层上实现。MySQL 8.0的社区版本仅支持单线程查询执行,无法充分利用硬件提供的所有核来执行复杂查询。我们修改了MySQL执行器,允许使用多个线程并行执行单个查询。与线下解决方案不同的是,云基础架构允许我们在计算节点上利用它的垂直扩展的能力。最大的计算节点目前有64个核,这也代表了我们通过并行查询可以实现的最大并行力度。当大部分热数据可以放在buffer pool里时,此优化效果最好。并行查询将在另一篇文章中详细解释。客户工作负载不仅包含DML,还包含DDL,例如索引创建、更改列的数据类型。虽然大多数DDL在MySQL中都是在线处理的,但有些操作可能会被阻塞,而且使用逻辑复制会扩大堵塞。GaussDB(for MySQL)使用物理复制,避免了这个问题。当表很大时,DDL操作可能需要数小时才能完成。为了支持我们在云上常见的数据量,优化DDL的必要性是显而易见的。我们已经有一种创新的方法来处理DDL,这种创新将在后面的文章中探讨。另一个允许更高并行力度的层是存储层,因为存储系统可能有数百个节点和数千个核心。GaussDB(for MySQL)使用的这种云规模的分布式存储是我们提高查询性能的一个关键基础,结合并行查询,有可能实现查询性能提高100倍以上。利用云存储提高查询性能 (算子下推:NDP)GaussDB(for MySQL)中的数据以slice形式组织,分布在多个存储节点上。我们利用这个数据分布,把算子卸载到数据所在的存储节点上,利用当地可用的计算资源执行,无需将数据读到计算节点中。用数据库术语,我们将其称为近数据处理(NDP)或算子下推。其基本原理是:将查询处理的部分工作下推到数据所在的存储节点上,所下推的查询是数据密集型查询,例如全表扫描和索引扫描,投影和某些WHERE条件的过滤,以及聚合在存储层执行,仅将匹配行和列返回到计算节点,而不是完整的页。除了并行执行之外,因为提取到计算节点的数据量显著减少,这种方法还减少了网络IO。此外,NDP算子下推还允许充分利用缓存和存储介质的本地带宽,当查询需要扫描大量数据,且数据不在Innodb缓冲池中时,卸载到存储的效果最好。例如,下图显示了NDP算子下推和并行查询将TCP-H Q12的执行时间优化了34倍。另一篇文章会单独介绍NDP的技术细节,并提供全面的性能分析。未来方向GaussDB(for MySQL)的设计是为云而生,此架构具有极其强大和灵活的垂直集成能力,计算和存储资源解耦并且可以独立扩展,同时在功能上紧密集成,数据库操作可以在多层中执行。未来,数据库功能也可以卸载到网卡和其他云组件,而不限于计算节点和存储。我们相信,云栈的深度集成是释放云数据库力量的关键,华为在实现这一目标方面处于独特的地位,正如GaussDB(for MySQL)所展示的那样,未来将引领云领域方向。 综上所述,华为云GaussDB(for MySQL)基于存算分离架构,通过并行查询PQ和算子下推NDP等先进技术,极大提升了数据库性能,实现了云栈垂直集成力量的最大化,让算力更快更猛。文章所述功能均已上线,欢迎大家前去华为云官网体验:https://www.huaweicloud.com/product/gaussdb_mysql.html,也请继续关注我们,后续还有更多技术信息与大家分享!华为将于2021年9月23-25日在上海世博中心&世博展览馆举办华为全联接2021,以“深耕数字化”为主题,汇聚业界思想领袖、商业精英、技术大咖、先锋企业、生态伙伴、应用服务商以及开发者等各方,探讨如何深入行业场景,把数字技术与行业知识深度结合,真正融入政企的主业务流程,解决核心业务问题,催生体验提升、效率提升以及模式创新;并发布场景化的产品与解决方案,分享客户伙伴的最新成果与实践,构筑开放共赢的健康生态。了解更多信息,请访问官网www.huawei.com/hc2021
-
ALTER TABLE people ADD INDEX lname_fname_age (lame,fname,age);为了提高搜索效率,我们需要考虑运用多列索引,由于索引文件以B-Tree格式保存,所以我们不用扫描任何记录,即可得到最终结果。注:在mysql中执行查询时,只能使用一个索引,如果我们在lname,fname,age上分别建索引,执行查询时,只能使用一个索引,mysql会选择一个最严格(获得结果集记录数最少)的索引。
-
1.索引优化 2.添加查询缓存 3.优化数据库SQL语句 4.数据库Cluster 1>首先,开启慢查询global【配置文件】,(标准可以自定义),通过分析日志文件或直接show,查看哪些查询较慢. 2>针对这条sql,添加Explain,查看其执行计划,查询数据条数/索引等 优化: 1.创建index索引,会占用存储空间,而且会降低DML操作的效率(做增删改需要维护索引),一般在sql中的where或者order by字段建立索引 2.通过查询缓存,可以开启Mybatis的二级缓存,自定义实现Mybatis+redis/Ehcache结合,需要注意的是,只对结果缓存,缓存结果要放在以业务逻辑相关为划分单位。缓存原则是对那些查询需求远大于增删改需求的数据 除此之外,尽量不要在where子句中使用函数,会使索引失效 如果已经确定查询结果只有一条数据(当表中数据的该字段是唯一的),在查询SQL末尾增加 limit 1 模糊查询尽量使用右模糊,左模糊会使索引失效 如果非要使用表连接,最好要保证连接的两个字段都是创建了索引的 避免使用select * 尽量使用非空 not null,可以使用‘’空串代替null。因为‘’不占用空间,null会占用空间的 在SQL语句中不要有运算,否则MySQL会放弃索引。 对于百万级以上的表数据,如果要做表连接查询,一定要对表先分页,然后对分页结果再做表连接。也可以不用表连接 nginx(负载均衡) 读写分离(MyCat) 主从复制(修改配置文件)
-
使用 show processlist 命令查看当前所有连接信息。使用 explain 命令查询 SQL 语句执行计划。开启慢查询日志,查看慢查询的 SQL。
-
MyISAM 只支持表锁,InnoDB 支持表锁和行锁,默认为行锁。表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量最低。行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率小,并发度最高。
-
InnoDB 引擎:mysql 5.1 后默认的数据库引擎,提供了对数据库 acid 事务的支持,并且还提供了行级锁和外键的约束,它的设计的目标就是处理大数据容量的数据库系统。MySQL 运行的时候,InnoDB 会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎是不支持全文搜索,同时启动也比较的慢,它是不会保存表的行数的,所以当进行 select count(*) from table 指令的时候,需要进行扫描全表。由于锁的粒度小,写操作是不会锁定全表的,所以在并发度较高的场景下使用会提升效率的。MyIASM 引擎:不提供事务的支持,也不支持行级锁和外键。因此当执行插入和更新语句时,即执行写操作的时候需要锁定这个表,所以会导致效率会降低。不过和 InnoDB 不同的是,MyIASM 引擎是保存了表的行数,于是当进行 select count(*) from table 语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的,可以将 MyIASM 作为数据库引擎的首选。
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签