ndb的sql语法跟mysql SQL语法不一直的地方

   2023-02-10 学习力0
核心提示:1,不支持临时表在NDB存储引擎中,不支持临时表;不能创建临时表和改变已经存在的临时表的引擎为NDB;否则报“Table storage engine 'ndbcluster' does notsupport the create option 'TEMPORARY'. ”。2,索引和键的限制(1),创建索引时,列宽不超过3072bytes;(

1,不支持临时表

在NDB存储引擎中,不支持临时表;不能创建临时表和改变已经存在的临时表的引擎为NDB;否则报“Table storage engine 'ndbcluster' does not support the create option 'TEMPORARY'. ”。

2,索引和键的限制

(1),创建索引时,列宽不超过3072bytes;

(2),不可以在TEXT and BLOB列创建索引;

(3),不支持FULLTEXT索引,只有myisam支持;

(4),在唯一索引和主键索引中不使用NULL列;在重建索引时,不要使用hash选项。

(5),不可以在bit类型列上,创建主键,唯一索引,索引;也不可以在创建复合列上创建主键,唯一索引,索引;

(6),在创建表时,在表的主键上用AUTO_INCREMENT选项,不可以。

3, Geometry数据类型在NDB表中被支持,但是spatial索引不被支持。

4,当ndb_apply_status和ndb_binlog_index表中使用字符latin1(ASCii)设置,因为名字二进制日志记录在表中,但是二进制文件名使用non-latin字符不能够被正确引用在表中。

解决这个问题,当命名二进制文件名,或者设置--basedir, --log-bin, or --log-bin-index 选项使用latin-1字符。

5, [LINEAR] KEY自定义分区在mysql5.1中支持(包括MySQL Cluster NDB 6.X and 7.X through 7.1)被约束,从MySQL 5.1.12开始,任何分区类型在创建表式,使用ENGINE=NDB or ENGINE=NDBCLUSTER,结果中都会报错。

6,从MySQL 5.1.6,所有的mysql集群表的默认分区采用key,使用表主键作为分区键;如果表没有设置主键,“隐式”主键自动被NDBCLUSTER引擎创建。

从MySQL Cluster NDB 6.2.18, MySQL Cluster NDB 6.3.25, and MySQL Cluster NDB 7.0.6开始,create table和alter table语句,下面两种情况不允许,报错(Bug #40709):

(1),表必须有明确的主键。

(2),在分区表中所有的列表,必须是主键中的一部分。

 

7,在集群中使用基于行复制,二进制日志(binlog_format=row)不可以关闭,但是NDB存储引擎会忽略参数"sql_log_bin" (Bug #16680)。

8,在NDB CLUSTERZ中,只可以使用 KEY 和LINEAR KEY分区方式。

9,关于NDB分区

(1),当使用ndbd,在ndbcluster表中最大的分区数,

[number_of_node_groups] = number_of_data_nodes / NoOfReplicas

NDB_MAX_PARTITION=8*[number of node groups];

(2),当使用ndbmtd是,最大分区数计算取决于参数MaxNoOfExecutionThreads,NDB_MAX_PARTITION=4*MaxNoOfExecutionThreads*[number of node groups];

 

 

//事务处理在NDB中的限制

1,事务隔离级别,NDB存储引擎只支持read committed级别。InnoDB支持的事务级别包括 READ COMMITTED, READ UNCOMMITTED, REPEATABLE READ, and SERIALIZABLE.

2,Transactions and BLOB or TEXT columns.  NDBCLUSTER stores only part of a column value that uses any of MySQL's BLOB or TEXT data types in the table visible to MySQL; the remainder of the BLOB or TEXT is stored in a separate internal table that is not accessible to MySQL. This gives rise to two related issues of which you should be aware whenever executing SELECT statements on tables that contain columns of these types:

  1. For any SELECT from a MySQL Cluster table: If the SELECT includes a BLOB or TEXT column, the READ COMMITTED transaction isolation level is converted to a read with read lock. This is done to guarantee consistency.

  2. Prior to MySQL Cluster NDB 7.0.12, for any SELECT which used a primary key lookup or unique key lookup to retrieve any columns that used any of the BLOB or TEXT data types and that was executed within a transaction, a shared read lock was held on the table for the duration of the transaction—that is, until the transaction was either committed or aborted.

 3,事务回滚,回滚真个事务,不会回滚部分事务。

4,NDB引擎不适合处理单个很大的事务,适合处理小事务,包含尽可能少的语句操作。由于大事务需要大量内存。

(1),truncate table不是事务处理,如果truncate table失败,你需重新执行知道成功。

(2),delete from 是事务处理。

(3),load data infile不是事务处理。

//数据库对象在mysql集群中的限制

(1),单个分区可以容纳的数据行数的最大值为46137488。

(2),行大小,单行最大值为8052 bytes,Each BLOB or TEXT column contributes 256 + 8 = 264 bytes to this total.

 

//在NDB存储引擎上特殊的限制

1,sql_log_bin不影响数据操作,但是只 schema操作。

2,表中有blob列,且没有主键,不会产生二进制日志。

3,当不在mysqld上执行下列语句,下面的语句在schema操作,讲记录到集群二进制日志:

  • CREATE TABLE

  • ALTER TABLE

  • DROP TABLE

  • CREATE DATABASE / CREATE SCHEMA

  • DROP DATABASE / DROP SCHEMA

  • CREATE TABLESPACE

  • ALTER TABLESPACE

  • DROP TABLESPACE

  • CREATE LOGFILE GROUP

  • ALTER LOGFILE GROUP

  • DROP LOGFILE GROUP

 

 //设计到mysql集群磁盘存储的限制

1,表空间创建的最大值: 232 (4294967296);

2,表空间包含的数据文件个数最大值:216 (65536) ;实际的上限为32G;

3,最大的数据文件大小:理论限制为64G(including MySQL Cluster NDB 6.X and 7.X through 7.1),相当于32765个extents(1M).表空间中区(extents)的最小值和最大值为32K和2G;

Disk Data tables and diskless mode.  Use of Disk Data tables is not supported when running the cluster in diskless mode. Beginning with MySQL 5.1.12, it is prohibited altogether. (Bug #20008)

 

 

 

 

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • sql:mysql:函数:TIMESTAMPDIFF函数实现TimeStamp字段相减,求得时间差
    sql:mysql:函数:TIMESTAMPDIFF函数实现TimeS
     函数内指定是minute,则最终结果value值的单位是分钟,如果函数内指定为hours,则最终结果value值单位为小时。//UPLOAD_TIME 减去 CREATE_DTTM 求得时间差,以分钟数计时select avg(TIMESTAMPDIFF(MINUTE,CREATE_DTTM,UPLOAD_TIME)) value,LEFT(CREATE_DTTM
    03-08
  • 去重复的sql(Oracle) 去重复的英文
    1.利用group by 去重复2.可以利用下面的sql去重复,如下  1) select id,name,sex from (select a.*,row_number() over(partition by a.id,a.set order by name) su from test a ) where su=1  2)select id,name,sex from (select a.*,row_number() over(p
    02-10
  • Oracle SQL七次提速技巧
    以下SQL执行时间按序号递减。1,动态SQL,没有绑定变量,每次执行都做硬解析操作,占用较大的共享池空间,若共享池空间不足,会导致其他SQL语句的解析信息被挤出共享池。create or replace procedure proc1as beginfor i in 1..100000 loop    execute imme
    02-10
  • Oracle\SQL  Server等及其他基本语句写法
    Oracle\SQL Server等及其他基本语句写法
    Oracle\SQL  Server等及其他基本语句写法目录一.Excel相关 11.Excel中写脚本范例: 12.提取字节 23. 提取单元格内字符 24.VLOOKUP函数: 2二.SQL语句汇总 21.建表: 22.增 33.删 44.查 65.改 236.Alter的应用 24三.数据库备份与恢复脚本 261. Oracle: 2
    02-10
  • SQL ORACLE case when函数用法
    case when 用法(1)简单case函数:格式:  case 列名   when 条件值1 then 选项1  when 条件值1 then 选项2......  else 默认值 end例如:  select   case job_level  when '1' then '1111'  when '2' then '2222'   when '3' then '3333
    02-10
  • mysql下如何执行sql脚本 执行SQL脚本
    1.编写sql脚本,假设内容如下:  create database dearabao;  use dearabao;  create table niuzi (name varchar(20));  保存脚本文件,假设我把它保存在F盘的hello world目录下,于是该文件的路径为:F:\hello world\niuzi.sql2.执行sql脚本,可以有2种方法: 
    02-10
  • MySQL 5.7版本sql_mode=only_full_group_by问题
    用到GROUP BY 语句查询时com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'col_user_6.a.START_TIME' which is not functionally dependent on colu
    02-10
  • Oracle迁移到MySQL性能下降的注意点 oracle数据
    背景:最近有较多的客户系统由原来由Oracle改造到MySQL后出现了性能问题CPU 100%,或是后台的CRM系统复杂SQL在业务高峰的时候出现堆积导致业务故障。在我的记忆里面淘宝最初从Oracle迁移到MySQL期间也遇到了很多SQL的性能问题,记忆最为深刻的子查询,当初的
    02-10
  • ORACLE中通过SQL语句(alter table)来增加、删除
    1.添加字段:alter table  表名  add (字段  字段类型)  [ default  '输入默认值']  [null/not null]  ;2.添加备注:comment on column  库名.表名.字段名 is  '输入的备注';  如: 我要在ers_data库中  test表 document_type字段添加备注  comm
    02-10
  • MySQL与Oracle 差异比较之六触发器
    触发器编号类别ORACLEMYSQL注释1创建触发器语句不同create or replace trigger TG_ES_FAC_UNIT  before insert or update or delete on ES_FAC_UNIT  for each rowcreate trigger `hs_esbs`.`TG_INSERT_ES_FAC_UNIT` BEFORE INSERT on `hs_esbs`.`es_fac_u
    02-10
点击排行