我经常看到人们正在使用Delimiters.我试着找出什么是分隔符,它们的目的是什么.经过20分钟的谷歌搜索,我无法找到满足我的答案.那么,我现在的问题是:什么是分隔符,什么时候应该使用它们?
有一个大的数据库,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) 我有两个关于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) 下面按照我的场景:
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 个项目元素的总和?
对于我的测试,我使用了这个版本的 …