小编Goo*_*bot的帖子

TRIGGER 会提高性能吗?

我知道TRIGGERs 很有用,因为它们负责后续查询,但是从性能的角度来看,它们也有优势吗?

将两个或三个查询替换为

INSERT INTO table1 ...
UPDATE table2 ...
UPDATE table3 ...
Run Code Online (Sandbox Code Playgroud)

使用基于触发器的查询作为

INSERT INTO table 1
Run Code Online (Sandbox Code Playgroud)

带触发器

CREATE TRIGGER test
AFTER INSERT ON table1
FOR EACH ROW BEGIN
UPDATE table2 ... WHERE id=NEW.id;
UPDATE table3 ... WHERE id=NEW.id;
END
Run Code Online (Sandbox Code Playgroud)
  1. 我们仍然拥有相同性能的三个查询吗?我的意思是我们执行后续查询或执行TRIGGER是否重要?

  2. 如果我们使用 API(例如通过 PHP 进行查询)会怎样。后续查询是内部的,无需连接器/驱动程序。是否TRIGGER提高了性能?

附加信息:数据库是带有 innoDB 的 mysql 5.5。

mysql trigger performance mysql-5.5 query-performance

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

如何在优先查询中使用OR?

在一个简单的查询中

SELECT * 
FROM table
WHERE id='x' OR id='y'
Run Code Online (Sandbox Code Playgroud)

如何优先获得仅其中一个WHERE条款?

我的意思是用id='x'. 仅当没有行时,获取行id='y'

换句话说,id='y'如果有一行则不要使用id='x'

mysql select mysql-5.5

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

在 FOREIGN KEY 约束中使用 RESTRICT 或 No ACTION

对不起,如果这个问题很幼稚,但我无法理解 RESTRICT 或 No ACTION 的可能用法。考虑一个简单的数据库

CREATE TABLE column1
(
first_id int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (first_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci";

CREATE TABLE column2
(
second_id int(11) NOT NULL AUTO_INCREMENT,
first_id int(11) REFERENCES column1(first_id) ON DELETE CASCADE,
PRIMARY KEY (second_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci";
Run Code Online (Sandbox Code Playgroud)
  1. 如果DELETE FROM column1 WHERE first_id='XX'column2(子列)中的对应行将被删除
  2. 如果DELETE FROM column2 WHERE first_id='XX'不会从 column1(父列)中删除任何内容

对?那么,什么以及如何RESTRICTNO ACTION可以改变这种情况?

mysql innodb foreign-key constraint

4
推荐指数
1
解决办法
7060
查看次数

如何使用 GROUP BY 从 JOIN 更新

SELECT查询中

SELECT b.id, MIN(IFNULL(a.views,0)) AS counted 
FROM table1 a JOIN table2 b ON a.id=b.id GROUP BY id 
HAVING counted>0
Run Code Online (Sandbox Code Playgroud)

我怎么能拒绝此查询UPDATE作为

UPDATE b.number = counted
Run Code Online (Sandbox Code Playgroud)

mysql join query update group-by

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

如何将字符串拆分为mysql中的另一个表并从中获取信息

我有一个系统可以为存储在列中的每个句子分配分数:

表 1:word_scores

word       score
this       3
is         4
a          5
test       1
another    0
sentence   8
Run Code Online (Sandbox Code Playgroud)

表2:句子(得分列根据表1计算)

sentence           score
this is a test     13
another sentence   8
this is            7
Run Code Online (Sandbox Code Playgroud)

现在我需要1.将每个句子提取到PHP中,2.然后将字符串拆分为单词,3.然后捕获每个单词的分数,4.然后计算word_scores的总和

是否可以在mysql中计算句子分数?

mysql innodb mysql-5.5

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

如何按mysql中列的总和对行进行分类?

我有一张桌子

id  num_items  folder
1   4
2   33
3   74
4   41
5   24
6   34
7   46
8   55
9   11
Run Code Online (Sandbox Code Playgroud)

我想为行分配文件夹编号,但限制每个文件夹中的项目数(例如 100)。因此,如果SUM(num_items) > 100.

UPDATEd文件夹应该看起来像

id  num_items  folder
1   4          1
2   33         1
3   74         2
4   41         3
5   24         3
6   34         3
7   46         4
8   55         4
9   11         5
Run Code Online (Sandbox Code Playgroud)

因为,SUM对整个列进行计算,显然,我需要SUM在达到文件夹中的最大项目后重置值/过程。

mysql

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

如何在 GROUP BY 查询中获取 MAX 和 MIN?

在这个查询中:

SELECT col1, col2, col3
FROM table1
GROUP BY col1
Run Code Online (Sandbox Code Playgroud)

每行包括 的第一个值col2col3的每个唯一值col1

如何选择MAXMIN的每个值col1

就像是:

SELECT col1, minimum of col2, maximum of col2, minimum of col3, maximum of col3
Run Code Online (Sandbox Code Playgroud)

mysql select mysql-5.5 group-by

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

如何按行顺序获取缺失值?

在一个表中,许多行已被删除,如何获取下一个缺失行的 id INSERT

例如

id      col1
1       1
3       3
4       4
5       5
8       8
9       9
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得 next 的第一个可用 id 的值INSERT。在这里,我想获取id = 2.

就像是

SELECT id+1 FROM table WHERE CLAUSE // pointing to the least available value
// or x = id +1 (after SELECT)
INSERT INTO table (id, ....) VALUES ('x', ....)
Run Code Online (Sandbox Code Playgroud)

mysql insert select

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

按另一个表的 COUNT 更新列

这可能是一个幼稚的问题,但这两个查询有什么区别,哪个是首选?

UPDATE table1, 
(SELECT id,COUNT(*) idcount FROM table2 GROUP BY id) AS B 
SET table1.Freq = B.idcount WHERE table1.id=B.id
Run Code Online (Sandbox Code Playgroud)

UPDATE table1 A INNER JOIN 
(SELECT id,COUNT(*) idcount FROM table2 GROUP BY id) B USING (id) 
SET A.Freq = B.idcount
Run Code Online (Sandbox Code Playgroud)

mysql performance join subquery update query-performance

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

MySQL中递归获取最高父id

我想找到每个条目最上面的父 ID。例如,

CREATE TABLE t1
(
ID int(11) unsigned NOT NULL,
ParentID int(11) unsigned,
PRIMARY KEY (ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;

INSERT INTO t1 (ID,ParentID) VALUES (1,NULL),(2,1),(3,2),(4,3);
Run Code Online (Sandbox Code Playgroud)

我意图得到

ID     Highest ParentID
1      NULL
2      1
3      1
4      1
Run Code Online (Sandbox Code Playgroud)

我计划创建一个递归查询(MySQL 8 或 MariaDB 10.5),方法是添加一个条件,以在 Parent ID 为特定值(例如,上述情况下为 NULL)时中断递归。我开始于

WITH RECURSIVE cte (ID, ParentID) as (
  SELECT ID,ParentID FROM t1
  UNION ALL
  SELECT t2.ID,t2.ParentID FROM t1 t2
  INNER JOIN cte on t2.ParentID = cte.ID
)
SELECT * FROM cte; …
Run Code Online (Sandbox Code Playgroud)

mysql join query recursive

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