问题应该是比较简单.
数据库下有6张表如下:想用C API中的mysql_query()对其进行插入 查询 更新 删除等操作.不知道正确的命令应该是什么样子的.
我网上四处乱搜看了几个例子, 然后照猫画虎的写了2个命令.
对于INSERT, 就是分别写了6条 INSERT INTO 表名 VALUES(), 然后最后commit.
对于SELECT, 就是普通的SELECT DATA FROM 表名 WHERE ID = 1, 然后中间用UNION ALL 连起来.不过跑起来速度慢的要命. 就没继续研究UPDATE 和 DELETE怀疑是我的命令不对. 特来请教高人们. 正规高效的命令应该是什么样子的. 多谢.由于本人水平较低. 请麻烦详细列出4中操作的例子
# RELATION TABLE #
CREATE DATABASE IF NOT EXISTS RELATION;use RELATION;CREATE TABLE TBL1 ( 
  ID  BINARY(9), 
  ID2 BINARY(11) NOT NULL, 
  ID3 BINARY(4),
  ID4 BINARY(4),
  ID5 BINARY(4),
  ID6 BINARY(8) NOT NULL,
  DATA VARBINARY(170) NOT NULL,  CONSTRAINT PRIMARY KEY USING HASH (ID),
  INDEX USING BTREE (ID2),
  INDEX USING BTREE (ID3),
  INDEX USING BTREE (ID4),
  INDEX USING BTREE (ID5),
  INDEX USING BTREE (ID6)
)
ENGINE = NDBCLUSTER;
CREATE TABLE TBL2 ( 
  ID BINARY(9), 
  DATA VARBINARY(16) NOT NULL,  CONSTRAINT PRIMARY KEY USING HASH (ID),
)
ENGINE = NDBCLUSTER;
CREATE TABLE TBL3 ( 
  ID BINARY(9), 
  DATA VARBINARY(593) NOT NULL,  CONSTRAINT PRIMARY KEY USING HASH (ID),
)
ENGINE = NDBCLUSTER;
CREATE TABLE TBL4 ( 
  ID BINARY(9), 
  DATA VARBINARY(841) NOT NULL,  CONSTRAINT PRIMARY KEY USING HASH (ID),
)
ENGINE = NDBCLUSTER;
CREATE TABLE TBL5 ( 
  ID BINARY(9), 
  DATA VARBINARY(308) NOT NULL,  CONSTRAINT PRIMARY KEY USING HASH (ID),
)
ENGINE = NDBCLUSTER;
CREATE TABLE TBL6 ( 
  ID BINARY(9), 
  DATA VARBINARY(8) NOT NULL,  CONSTRAINT PRIMARY KEY USING HASH (ID),
)
ENGINE = NDBCLUSTER;

解决方案 »

  1.   

    由于是操作不同的6个表,所以建议还是用6条语句来实现 insert / update / delete除非分析你的表结构,是否能把这6张表合并为一张。
      

  2.   

    只是速度慢还是SQL语句语法问题?
      

  3.   


    我有把六张表合为一个表的.
    现在就是他们要求做一下不同的data model对数据库操作的影响.空间占用率 CPU 内存 网络吞吐什么的.那么就是说我的INSERT操作语句没什么问题了?
    那效率怎么能下降那么多呢?从每秒4000多一下子变成每秒40多了.
    有办法优化? 还是5个表的性能就这样了?
      

  4.   


    暂时我只能发现速度慢.
    因为不会详细分析. 所以只能猜我的SQL语句没问题至少mysql_query()之后返回值是0.
      

  5.   


    恩/.的确是有这种打算.
    现在的任务+计划就是对于3种不同的DATA MODEL (所有都在一张表, 六张表, 综合成两张表)的数据库性能分析.所以这么是必须的. 我就是想知道对于这种多表操作的SQL语句.我上面的例子是否是争取的处理方法.
    如果不是.对于多表的事物处理的SQL语句应该是什么样子的.我感觉性能是肯定要比单表下降的. 不过问题是现在下降的太多了.有点让我不能理解. 所以特意来问问我的测试方法是否是正确的
      

  6.   

    自己个顶一个.现在我所有的东西都是
    BEGIN
    {
      INSERT INTO TABLE1 VALUES();
      INSERT INTO TABLE2 VALUES();
      INSERT INTO TABLE3 VALUES();
      INSERT INTO TABLE4 VALUES();
      INSERT INTO TABLE5 VALUES();
      INSERT INTO TABLE6 VALUES();
    }
    COMMITBEGIN
    {
      SELECT * FROM TABLE1 WHERE ID = X;
      SELECT * FROM TABLE2 WHERE ID = X;
      SELECT * FROM TABLE3 WHERE ID = X;
      SELECT * FROM TABLE4 WHERE ID = X;
      SELECT * FROM TABLE5 WHERE ID = X;
      SELECT * FROM TABLE6 WHERE ID = X;
    }
    COMMIT
    BEGIN
    {
      UPDATE TABLE1 SET DATA = X WHERE ID = X;
      UPDATE TABLE2 SET DATA = X WHERE ID = X;
      UPDATE TABLE3 SET DATA = X WHERE ID = X;
      UPDATE TABLE4 SET DATA = X WHERE ID = X;
      UPDATE TABLE5 SET DATA = X WHERE ID = X;
      UPDATE TABLE6 SET DATA = X WHERE ID = X;
    }
    COMMITBEGIN
    {
      DELETE FROM TABLE1 WHERE ID = X;
      DELETE FROM TABLE2 WHERE ID = X;
      DELETE FROM TABLE3 WHERE ID = X;
      DELETE FROM TABLE4 WHERE ID = X;
      DELETE FROM TABLE5 WHERE ID = X;
      DELETE FROM TABLE6 WHERE ID = X;
    }
    COMMIT
    这样是正确的作法么?
      

  7.   

    错了
    SELECT 不是.
    就是六条SELECT而已.没有什么BEGIN COMMIT啥的.
      

  8.   

    SQL语句可以了,你在ID上建立索引试试查询速度是否会有改善
      

  9.   


    ID上建索引?就是说
    除了
    CONSTRAINT PRIMARY KEY USING HASH (ID),
    还要
    INDEX USING BTREE (ID2),
    ?
      

  10.   

    多谢~结贴发分回头告诉上头
    1个表tps 5000
    6个表tps就变成25了让他们自行定夺 自己个优化吧