• [问题求助] ARM架构的鲲鹏系统,安装MySQL 8.0 出现报错
    【操作步骤&问题现象】【截图信息【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] 好书推荐 | 理论加实践 GaussDB(for MySQL) 数据库知识快速学
    随着“互联网+”、大数据、AI和数据挖掘等技术的不断发展,数据库技术和产品日新月异,云端数据库已经成为一种重要的数据库类型。作为华为云新一代高性能企业级分布式数据库,GaussDB(for MySQL) 为数据的安全可靠提供了强有力的保障。想学习GaussDB(for MySQL) 的相关知识吗?想掌握GaussDB(for MySQL) 相关实践吗?现在为你带来“华为高校人才培养指定教材/华为ICT学院系列教材”系列丛书中的两本数据库技术书籍——《数据库原理与技术》《数据库原理与技术实践教程》,让你一次性掌握GaussDB(for MySQL) 数据库理论和实践。内容简介本书内容包括数据库的发展史、数据库基础知识、SQL语法入门、SQL语法分类、数据库安全基础、数据库开发环境、数据库设计基础和华为云数据库产品GaussDB的使用。书中使用的华为GaussDB(for MySQL)全面支持开源数据库MySQL的语法和功能,所有实验都可在此数据库平台上运行。本书可作为高校数据库课程的教材,也适合作为HCIA-GaussDB V1.5认证考试的参考书。优点特色理实结合 《数据库原理与技术》详细介绍华为云端数据库产品GaussDB数据库的使用方法,《数据库原理与技术——基于华为GaussDB》作为配套实验教材,精心设计实验,帮助读者由浅渐深地掌握基本的数据库SQL开发、权限管理、数据库设计等能力。两本书同时配套学习使用,相得益彰。适配性高 书籍以HCIA-GaussDB V1.5考试大纲为主线,可作为考取该认证的学习参考书籍。资源丰富 书籍均配套相应的案例和习题、实验等,利于教师教学和学生学习。
  • [交流分享] 封装了mysql通用类
    在python中我们可以用ORM来操作数据库,然而最原生的方法就是使用pymysql类,我封装了从连接数据到对数据库的增删改查的方法import pymysql# 从配置文件中导入连接数据库的信息from config import DB_HOST, DB_USER, DB_PASSWORD, DB_NAMEclass MySQL:    """    mysql类    """    def __init__(self):        """        连接数据库        """        try:            self.conn = pymysql.connect(host=DB_HOST,                                        user=DB_USER,                                        password=DB_PASSWORD,                                        database=DB_NAME,                                        charset='utf8',                                        cursorclass=pymysql.cursors.DictCursor)        # 出现异常时执行的代码        except Exception as e:            print(e)        # 没有异常时执行的代码        else:            print(" * Database connection succeeded!")            # 获取游标            self.cursor = self.conn.cursor()    def insert(self, sql):        """        插入方法        :param sql:        :return:        """        # 执行sql语句        self.cursor.execute(sql)        # 提交sql        self.conn.commit()        return "insert ok"    def delete(self, sql):        """        删除        :param sql:        :return:         """        # 执行sql语句        self.cursor.execute(sql)        # 提交sql        self.conn.commit()               return "delete ok"    def update(self, sql):        """        修改方法        :param sql:        :return:        """        # 执行sql语句        self.cursor.execute(sql)        # 提交sql        self.conn.commit()        return "update ok"    def get_one(self, sql):        """        查询单个数据        :param sql:        :return:对象        """        # 执行sql语句        self.cursor.execute(sql)        # 获取数据        res = self.cursor.fetchone()        # 返回结果集        return res    def get_all(self, sql):        """        查询多个数据        :param sql:        :return:数据集        """        # 执行sql语句        self.cursor.execute(sql)        # 获取数据        res = self.cursor.fetchall()        # 返回结果集        return res    def __del__(self):        """        析构方法        :return:        """        # 关闭游标        self.cursor.close()        # 关闭数据库链接        self.conn.close()总结  关于操作数据库,基本的就是对数据库的增删改查,以及索引等,用封装的思想把最基本的方法封装起来,用的时候直接导入即可!
  • [问题求助] 【GaussDB(for MySQL)产品】【数据库连接功能】学习使用GaussDB过程中,无法连接到数据库
    【功能模块】本人学习使用GaussDB的过程中,按照帮助文档想在本地的Java项目中使用JDBC连接数据库,但是怎么都连接不上【操作步骤&问题现象】1、没有购买弹性云服务器,所以想用内网连接。第一步在java项目中添加依赖2、根据帮助文档,在项目中增添类,写连接接口备注:根据文档,我所写的URL中:192.168.0.84:是所购买实例后,实例的内网读写IP地址3306:该实例开放的端口号foruser:我创建的数据库数据库:附:数据库的用户管理:3、开放端口号。我在数据库实例绑定的虚拟私有云增加安全组规则:4、测试连接数据库:【截图信息】连接不上报错信息注:用户密码我写了备忘录,创建的时候密码还有在java后端写的password都是是复制粘贴的,所以不可能出现错误我根据文档做了以上努力,目前找不到错误原因,求告知有做的不正确的地方!!或者错误原因!!感谢!!!
  • [优秀博文] GaussDB(for MySQL)如何快速创建索引?华为云数据库资深架构师为您揭秘
    导读:云服务环境下,如何解决客户基于大量数据创建索引的性能问题,成为云服务厂商的一个挑战。华为云GaussDB(for MySQL)通过引入并行创建索引技术,很好地解决了批量索引创建和临时添加索引等性能瓶颈问题,帮助用户更快建立好索引。想要进一步了解快速创建索引的秘诀,请不要错过本文。关于MySQL索引       我们都知道,数据库使用索引技术加快数据的查询。MySQL数据库也支持若干种索引结构提高查询的性能(参见MySQL文档:https://dev.mysql.com/doc/refman/8.0/en/create-index.html),其中使用最广泛的是B+tree索引,因为B+tree索引在查询和修改的性能之间有很好的平衡,同时其存储和维护的代价也是比较优的。       MySQL的表本身由聚簇索引(必须是B+tree索引)表示,再加上若干个二级索引,包括B+tree索引,共同组成一个MySQL的独立表,可以说MySQL的表是由一组索引共同组成的。我们都知道索引是一把双刃剑,充分的索引可以更好地提升可以适配的查询的性能,但是需要维护这些索引使得其和数据同步,所以在数据修改操作阶段,更多的索引也会带来更高的开销。索引创建与否的权衡通常是动态的,用户不一定能做到在表定义之初就知道需要建立哪些索引,需要随着业务的发展变化而调整索引,这也带来了动态索引创建的一些问题。 MySQL的索引创建逻辑       我们先看一下MySQL索引创建的逻辑。首先,MySQL索引的创建可以使用两种不同的DDL(Data Definition Language: 数据定义语言)算法来实现。第一种是COPY算法,它非常低效,就是在两个表之间进行数据拷贝,来完成表结构相关的修改,尤其是它要求加表锁,现在基本不使用了。第二种是INPLACE算法,该算法不要求加锁,因此很多DDL操作是不阻塞DML(Data Manipulation Language: 数据操纵语句)操作的,比如创建索引。该算法具体的实现在存储引擎层面完成,可以进行更多的优化。实际上DDL语句还有一种INSTANT算法,但是它无法支持创建索引操作,这里不展开介绍。       对于INPLACE算法,在5.7版本之前,是采用索引记录不断地向建好的空索引插入的方式。由于插入的数据的无序性,该方法导致了明显的性能问题和潜在的空间浪费。在5.7版本以后,MySQL优化了建索引步骤,将其改进为对已排序的索引记录进行自底向上批量插入并且紧凑拼装的创建方式,如果有多个索引要创建,会单独对每个索引执行相同的算法。新的算法会经历读取数据、排序数据和创建索引这几个主要步骤。       总体而言,创建索引这类DDL操作,会比普通的DML等操作要费时,而该类DDL耗时会导致用户在继续动态添加索引加速查询的时候,需要等待很长的时间,极大影响业务;而且用户的MySQL实例开启了Binlog复制,耗时的DDL操作容易引起备库的长时间落后。MySQL的创建索引流程图云化场景下索引创建的问题       随着越来越多用户把数据托管在云服务上,以及用户数据量的不断增长,前述的动态添加索引导致的问题非常影响用户体验。同时客户的单表数据逐渐达到几TB甚至几十TB,客户对创建索引太慢所带来的性能问题的抱怨越来越多,尤其是创建索引周期如果太长,我们可能很难找到一段合适的业务低峰期来动态创建索引,避免业务的波动。因此,如何在云服务环境下,解决客户基于大量数据创建索引的性能问题,成为云服务厂商的一个挑战。       在云化场景下,还有一个主要场景对客户的体验非常重要。我们知道客户的业务要迁移上云,需要对数据进行大规模的迁移(华为云提供了数据复制服务DRS工具支持各类数据迁移场景),数据迁移比较高效的方式为: 逻辑导出源端数据 在目标端建表(注意,表不含二级索引) 将源端导出的数据插入到目标端 对目标端的表建立二级索引       如果涉及动态数据同步,相关步骤会更复杂一些,由于和该主题无关,这里不展开。以上步骤中,需要重点注意的是步骤2和4,在目标端创建表的时候先不创建二级索引。这个优化对性能影响很大,尤其是一个表有很多二级索引的场景。我们知道Btree索引的插入如果是有序的,对插入性能和结果的空间利用率是最好的,因为Btree索引的分裂会在插入区域的尾部产生,同时由于分裂算法的优化,分裂产生的页面填充率会比较高;相反地,如果是随机插入,尤其是并发地随机插入,很容易导致Btree索引在不同的节点进行分裂,并且分裂后的页面填充率都处于一个半满的状态,导致Btree最终的一个膨胀。 有了这个背景之后,我们就容易理解上面的问题,插入表数据的时候,我们屏蔽了二级索引,等所有数据都准备好了,再采用批量建立索引的方式创建二级索引,这对于二级索引创建效率是最高的。如果不这么做,每插入一条记录,就要去插入相应的二级索引,那么二级索引就是一个无序的随机插入,并发起来性能会变差很多。       虽然在数据同步准备好后,批量创建二级索引是一个有效的方案,但是如果数据量很大,这么创建二级索引还是非常耗时,导致客户在数据迁移完之后需要等待很长时间才能开展业务,这个等待周期可能是小时甚至天级别的。虽然可以考虑表级别的并发创建索引,但是这个方法也有明显的缺点:应用场景有限,要求有多表;以及表和表之间的并发其实不是一个最有效的并发形式,相互影响比较大。GaussDB(for MySQL)如何快速创建索引?       综上所述,在创建索引这个点上存在两个性能瓶颈点:一个是用户迁移数据之后的批量索引创建;第二个是用户临时需要添加一个二级索引。无论哪个点,我们都需要更快的建立好索引,提升用户的使用体验。       华为云GaussDB(for MySQL)引入了并行创建索引的技术,它改进了社区版MySQL创建索引只用单线程的问题,以此提高创建索引的效率,并一起解决了前述两个痛点。前面提到的社区版创建索引逻辑是单线程的,首先存在资源利用率不够饱满的问题;其次创建索引过程是CPU和IO开销交替进行的过程,在做一个操作的时候,即使不是资源竞争的操作也只有等待。多线程创建索引可以充分利用CPU和IO资源,同时有的线程在做CPU计算时,别的线程可以并发的做IO操作。       GaussDB(for MySQL)使用的并行创建索引,是一个全链路的并行技术。前面提到,创建索引包含了若干个阶段,我们的并行创建算法,对这里的每个阶段都做并行处理,从读取数据、排序、到创建索引,都是并行操作,每一步都由指定的N个线程并发处理。它的逻辑如下图所示:       GaussDB(for MySQL)尤其对数据的归并排序做了多种优化,使得我们常规的归并排序能够充分的并行,充分利用CPU、内存和IO的资源。在并行创建索引之后的合并步骤,也使用了一套简化的算法,正确处理各种索引结构的场景。支持的索引和场景       GaussDB(for MySQL)的并行创建索引功能,目前支持的索引为Btree二级索引。对于virtual index二级索引,将会在不久的将来提供全面的支持,而MySQL的spatial index和fulltext index不在该并行创建索引覆盖范围内。       特别要注意的是,主键索引的创建目前也是不支持并行的,因此如果一个并行创建索引的SQL语句包含创建主键索引,或者前面提及的spatial index与fulltext index,那么客户端将会收到一个告警,提示该操作不支持并行创建索引,同时该语句会采用单线程创建索引的方式执行完成。       从SQL语句的角度,如前所述,创建索引可以采用不同的算法,由于COPY算法(ALGORITHM=COPY)不是采用批量插入的方式,因此不会受益于该并行创建索引优化。而对于INPLACE算法,如果创建索引用的是非rebuild的方式,都可以受益于该优化;一旦需要使用rebuild的方式创建索引,因为涉及到主键索引的建立,将无法使用并行创建索引的算法。示例下面我们通过几个实例来了解一下如何使用并行创建索引算法加快创建速度,以及我们的条件约束是如何生效的。1. 我们使用sysbench的表,表内有1亿条数据2. 在该表的k字段建索引,采用社区默认单线程,耗时82s3. 通过设置innodb_rds_parallel_index_creation_threads = 4启用4个线程建索引,可以看到建索引耗时72s,速度提升3.79倍4. 假设我们要修改主键索引,虽然指定了多线程,但是会收到一个warning,实际上只能通过单线程建索引注意事项 首先对innodb_rds_parallel_index_creation_threads这个参数进行一下说明,它控制了系统中所有并行DDL可以使用的总线程数,取值范围是[1-128]。该参数取值为1表示使用原始的单线程创建索引,取值为N,表示接下来的DDL使用N个线程创建。如果一个DDL使用了100个线程在执行,那么另外一个也要使用并行的DDL且最多只能使用剩下的28个线程;而如果128个线程都被并行DDL语句占用了,新来的DDL只能走原始的单线程创建的逻辑。 虽然该并行创建索引加快了索引的创建速度,但是在具体使用场景下,还是需要有审慎的评估。我们知道在并行算法应用之后,该DDL对硬件资源的使用会尽可能的充分,这也意味着其它操作就得不到太多的资源了。因此,针对不同的场景需要具体地分析,它决定了我们如何创建索引。 对于迁移场景,由于这时候还没有任何业务接入,用户希望尽快完成所有索引的创建,因此可以尽量设置多线程数,比如我们是16核规格的实例,那么我们就可以把并行线程的数量指定为16,加速完成操作。 如果是用户业务运行阶段要创建索引,我们还是不希望DDL操作,对正在运行的业务如DML操作等有太多的影响。因此,这时候创建索引可以指定相对少一些的线程数量,比如2-4(或者根据CPU规格以及负载决定,同时不鼓励并发地执行多个DDL操作)。这样既能相对地加速创建索引的进程,也能保证DML的正常进行。         综上所述,GaussDB(for MySQL)支持了并行创建索引,通过缩短创建索引使用的时间,很好地解决了客户关切的两类问题,提升了客户的体验。但技术无止境,在创建索引领域,还有其它的问题需要我们优化解决,例如如何减少创建索引步骤对IO的影响等等。我们后续会针对这些点进行优化,给客户带来更多的惊喜。       目前,华为云GaussDB(for MySQL) 并行创建索引优化功能已上线,欢迎大家前往华为云官网体验:https://www.huaweicloud.com/product/gaussdb_mysql.html 附:华为云GaussDB(for MySQL)内核专家系列文章华为海外女科学家为您揭秘:GaussDB(for MySQL)云栈垂直集成的力量有多大?华为云数据库内核专家为您揭秘:GaussDB(for MySQL)并行查询有多快?
  • [交流吐槽] mysql字段名及字段配制合理性
    剔除关系不密切的字段字段命名要有规则及相对应的含义(不要一部分英文,一部分拼音,还有类似a.b.c这样不明含义的字段)字段命名尽量不要使用缩写(大多数缩写都不能明确字段含义)字段不要大小写混用(想要具有可读性,多个英文单词可使用下划线形式连接)字段名不要使用保留字或者关键字保持字段名和类型的一致性慎重选择数字类型给文本字段留足余量
  • [技术干货] Mysql 中 MyISAM 和 InnoDB 的区别以及选择
    区别:InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高;如何选择:是否要支持事务,如果要请选择innodb,如果不需要可以考虑MyISAM;如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读写也挺频繁,请使用InnoDB。系统奔溃后,MyISAM恢复起来更困难,能否接受;MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不会差。
  • [问题求助] abc平台中的对象管理是mysql吗&FDI;数据集成目标数据源设置成abc平台的对象管理 救急!!!
    这个是mysql嘛,如果是的话我可以用Navicat连接吗,url 和账户密码改去哪里查看吖,如果不是mysql或者用其他的数据源,我该怎么连接啊我现在的目的就想把目标数据源设置成abc平台的对象管理,有没有大佬指点一二,救急救急~~~
  • [基础组件] 【MRS】【Spark-shell功能】使用spark-shell去读mysql中的数据失败
    【功能模块】MRS 8.0.2混合云版本   Spark 组件  spark-shell功能模块【操作步骤&问题现象】1、进入MRS客户端,source环境变量后完成用户kinit认证2、执行命令启动spark-shell:spark-shell --jars /opt/bdos/bdos-runner-server/lib/mysql-connector-java-8.0.21.jar3、执行命令读取mysql数据:val a = spark.read.format("jdbc").option("url", "jdbc:mysql://172.16.149.167:3306/test").option("query", "select id from test").option("user", "root").option("password", "AHiXitVt6f3gmW3JQII=").option("driver", "com.mysql.jdbc.Driver").load()【截图信息】
  • [交流吐槽] MySQL触发器简单实例
    CREATE TRIGGER <触发器名称>  --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.{ BEFORE | AFTER }  --触发器有执行的时间设置:可以设置为事件发生前或后。{ INSERT | UPDATE | DELETE }  --同样也能设定触发的事件:它们可以在执行insert、update或delete的过程中触发。ON <表名称>  --触发器是属于某一个表的:当在这个表上执行插入、 更新或删除操作的时候就导致触发器的激活. 我们不能给同一张表的同一个事件安排两个触发器。FOR EACH ROW  --触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次。<触发器SQL语句>  --触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句, 包括复合语句,但是这里的语句受的限制和函数的一样。
  • [交流吐槽] MySQL支持的分区类型
    RANGE分区: 这种模式允许将数据划分不同范围。例如可以将一个表通过年份划分成若干个分区LIST分区: 这种模式允许系统通过预定义的列表的值来对数据进行分割。按照List中的值分区,与RANGE的区别是,range分区的区间范围值是连续的。HASH分区 :这中模式允许通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区。例如可以建立一个对表主键进行分区的表。KEY分区 :上面Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的。
  • [技术干货] 分区表的限制因素
    一个表最多只能有1024个分区MySQL5.1中,分区表达式必须是整数,或者返回整数的表达式。在MySQL5.5中提供了非整数表达式分区的支持。如果分区字段中有主键或者唯一索引的列,那么多有主键列和唯一索引列都必须包含进来。即:分区字段要么不包含主键或者索引列,要么包含全部主键和索引列。分区表中无法使用外键约束MySQL的分区适用于一个表的所有数据和索引,不能只对表数据分区而不对索引分区,也不能只对索引分区而不对表分区,也不能只对表的一部分数据分区。
  • [交流吐槽] MySQL联合索引
    联合索引是两个或更多个列上的索引。对于联合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a   、    a,b   、  a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引 不同于使用两个单独的索引。复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知 道姓,电话簿将非常有用;如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。
  • [技术干货] MySQL分区
     什么是表分区?表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,但是底层却是由多个物理分区组成。表分区与分表的区别分表:指的是通过一定规则,将一张表分解成多张不同的表。比如将用户订单记录根据时间成多个表。分表与分区的区别在于:分区从逻辑上来讲只有一张表,而分表则是将一张表分解成多张表。表分区有什么好处?分区表的数据可以分布在不同的物理设备上,从而高效地利用多个硬件设备。 2. 和单个磁盘或者文件系统相比,可以存储更多数据优化查询。在where语句中包含分区条件时,可以只扫描一个或多个分区表来提高查询效率;涉及sum和count语句时,也可以在多个分区上并行处理,最后汇总结果。分区表更容易维护。例如:想批量删除大量数据可以清除整个分区。可以使用分区表来避免某些特殊的瓶颈,例如InnoDB的单个索引的互斥访问,ext3问价你系统的inode锁竞争等。 分区表的限制因素一个表最多只能有1024个分区MySQL5.1中,分区表达式必须是整数,或者返回整数的表达式。在MySQL5.5中提供了非整数表达式分区的支持。如果分区字段中有主键或者唯一索引的列,那么多有主键列和唯一索引列都必须包含进来。即:分区字段要么不包含主键或者索引列,要么包含全部主键和索引列。分区表中无法使用外键约束MySQL的分区适用于一个表的所有数据和索引,不能只对表数据分区而不对索引分区,也不能只对索引分区而不对表分区,也不能只对表的一部分数据分区。
  • [交流吐槽] 为什么用自增列作为主键
    如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引、如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引、如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是隐含的)。数据记录本身被存于主索引(一颗B+Tree)的叶子节点上。这就要求同一个叶子节点内(大小为一个内存页或磁盘页)的各条数据记录按主键顺序存放,因此每当有一条新的记录插入时,MySQL会根据其主键将其插入适当的节点和位置,如果页面达到装载因子(InnoDB默认为15/16),则开辟一个新的页(节点)如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页如果使用非自增主键(如果身份证号或学号等),由于每次插入主键的值近似于随机,因此每次新纪录都要被插到现有索引页得中间某个位置,此时MySQL不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读回来,这增加了很多开销,同时频繁的移动、分页操作造成了大量的碎片,得到了不够紧凑的索引结构,后续不得不通过OPTIMIZE TABLE来重建表并优化填充页面。
总条数:671 到第
上滑加载中