相关疑难解决方法(0)

MySQL中的分隔符

我经常看到人们正在使用Delimiters.我试着找出什么是分隔符,它们的目的是什么.经过20分钟的谷歌搜索,我无法找到满足我的答案.那么,我现在的问题是:什么是分隔符,什么时候应该使用它们?

mysql delimiter

145
推荐指数
4
解决办法
15万
查看次数

MySQL和NoSQL:帮我选择合适的

有一个大的数据库,1,000,000,000行,称为线程(这些线程实际存在,我不是因为我喜欢它而使事情变得更难).线程中只有一些东西,以加快速度:(int id,string hash,int replycount,int dateline(timestamp),int forumid,string title)

查询:

select * from thread where forumid = 100 and replycount > 1 order by dateline desc limit 10000, 100

由于存在1G的记录,因此查询速度非常慢.所以我想,让我们在尽可能多的论坛(类别)中将这1G记录分开!这几乎是完美的.有很多表我搜索的记录较少,而且速度真快.查询现在变为:

select * from thread_{forum_id} where replycount > 1 order by dateline desc limit 10000, 100

99%的论坛(类别)真的更快,因为大多数论坛只有少数主题(100k-1M).但是因为有一些大约有10M的记录,一些查询仍然会变慢(0.1/.2秒,对我的应用来说太多了!我已经在使用索引!).

我不知道如何使用MySQL改进这一点.有办法吗?

对于这个项目,我将使用10台服务器(12GB内存,4x7200rpm硬盘,软件raid 10,四核)

这个想法是简单地在服务器之间拆分数据库,但是上面解释的问题仍然没有得到解决.

如果我在这10台服务器上安装cassandra(通过假设我找到时间让它按预期工作)我应该假设性能提升吗?

我该怎么办?继续使用MySQL与多台机器上的分布式数据库或构建一个cassandra集群?

我被要求发布索引是什么,这里是:

mysql> show index in thread;
PRIMARY id
forumid
dateline
replycount
Run Code Online (Sandbox Code Playgroud)

选择说明:

mysql> explain SELECT * FROM thread WHERE forumid = 655 AND visible = 1 AND open …
Run Code Online (Sandbox Code Playgroud)

php mysql cassandra nosql

40
推荐指数
2
解决办法
2万
查看次数

在BEGIN ... END上下文或外部和LOOP语法中启动TRANSACTION

我有两个关于MySQL中的复合语句和事务的问题.

第一:

MySQL手册中有两个注释:

注意

在所有存储的程序中,解析器将BEGIN [WORK]视为BEGIN ... END块的开头.要在此上下文中开始事务,请改用START TRANSACTION.

注意

在所有存储的程序(存储过程和函数,触发器和事件)中,解析器将BEGIN [WORK]视为BEGIN ... END块的开头.在此上下文中使用START TRANSACTION开始交易.

我无法理解究竟是什么意思.他们的意思是我必须START TRANSACTION代替BEGIN或之后放BEGIN

// 1st variant:

BEGIN
   START TRANSACTION
   COMMIT
END


// 2nd variant:

START TRANSACTION
COMMIT
END
Run Code Online (Sandbox Code Playgroud)

哪一种是正确的方式,第一种变体或第二种变体?

第二:

我不想创建存储过程或函数.我只想在常规流程中创建一个带有循环的Compound-Statement Block,如下所示:

USE 'someDb';
START TRANSACTION
   ... create table statement
   ... insert statement

// now I want to implement some insert/select statements using loop, I do as follows:

DELIMITER $
BEGIN
  SET @n = 1, @m = 2;
  lab1: LOOP …
Run Code Online (Sandbox Code Playgroud)

mysql loops stored-procedures transactions

5
推荐指数
1
解决办法
3万
查看次数

MySQL Labs JSON 本机类型:如何对 jsn_extract 返回的数组结果求和?

下面按照我的场景:

CREATE TABLE `CustomerOrder` (
  `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT,
  `data` json DEFAULT NULL,
  PRIMARY KEY (`id`)
);
Run Code Online (Sandbox Code Playgroud)

我们可以使用这个 Customer Order json 作为例子:

{ 
    "creation": "2015-07-30 14:27:51",
    "customer": {
        "id": 2,
        "email": "foo@bar.com"
    },
    "item": [
        {
            "sku": 182,
            "unitPrice": 0.89,
            "qty": 10
        }, {
            "sku": 712,
            "unitPrice": 12.99,
            "qty": 2
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

在 MySQL 控制台上运行此 SQL:

SELECT json_extract(data, '$.item[*].unitPrice') AS price FROM CustomerOrder;

我会有这个输出:

[ 0.89, 12.99 ]
Run Code Online (Sandbox Code Playgroud)

现在我如何评估 [0.89 + 12.99] 或 1..N 个项目元素的总和?

对于我的测试,我使用了这个版本的 …

mysql json nosql mysql-5.7

2
推荐指数
2
解决办法
5683
查看次数