相关疑难解决方法(0)

哪个更快,一个大查询还是多个小查询?

我一直在为不同的公司工作,我注意到他们中的一些人更喜欢拥有将所有“亲戚”加入表格的视图。但是在应用程序中,有时我们只需要使用 1 列。

那么只进行简单的选择,然后将它们“加入”到系统代码中会更快吗?

该系统可以是 php、java、asp 或任何连接到数据库的语言。

所以问题是,从服务器端(php、java、asp、ruby、python...)到数据库并运行一个查询来获取我们需要的一切或从服务器端到数据库并运行哪个更快?一次只从一个表中获取列的查询?

mysql postgresql performance join query-performance

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

MySQL 中的 ORDER BY FIELD() 如何在内部工作

我了解ORDER BY子句的工作原理以及FIELD()函数的工作原理。我想了解的是他们两个如何一起工作进行排序。如何检索行以及如何导出排序顺序

+----+---------+
| id |  name   |
+----+---------+
|  1 | stan    |
|  2 | kyle    |
|  3 | kenny   |
|  4 | cartman |
+----+---------+ 

SELECT * FROM mytable WHERE id IN (3,2,1,4) ORDER BY FIELD(id,3,2,1,4)
Run Code Online (Sandbox Code Playgroud)

上面的查询将导致

+----+---------+
| id |  name   |
+----+---------+
|  3 | kenny   |
|  2 | kyle    |
|  1 | stan    |
|  4 | cartman |
+----+---------+ 
Run Code Online (Sandbox Code Playgroud)

类似于说 ORDER BY 3, 2, 1, …

mysql order-by fields

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

MySQL子查询的问题

为什么这个查询

DELETE FROM test 
WHERE id = ( SELECT id 
             FROM (SELECT * FROM test) temp 
             ORDER BY RAND() 
             LIMIT 1
           );
Run Code Online (Sandbox Code Playgroud)

有时删除 1 行,有时删除 2 行,有时什么都不删除?

如果我用这种形式写:

SET @var = ( SELECT id 
             FROM (SELECT * FROM test) temp 
             ORDER BY RAND() 
             LIMIT 1
           ); 
DELETE FROM test 
WHERE id=@var;
Run Code Online (Sandbox Code Playgroud)

那么它可以正常工作 - 子查询有问题吗?

mysql

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

有什么方法可以跟踪优化器在 MySQL 中的工作吗?

就像 SQL Server 中的 MEMO 结构一样,它是优化器在优化查询时所采取的步骤的“书面记录”。MySQL 中是否有任何内容可以让我获得诸如优化器考虑的计划、每个计划的成本之类的信息?

mysql optimization

7
推荐指数
1
解决办法
1081
查看次数

有什么办法可以强制 MySQL 使用 Hash Join 而不是 Nested Loop Join?

根据文档MySQL Explain Output format,MySQL 使用嵌套循环连接方法解析所有连接。有没有办法强制 MySQL 使用散列连接?

mysql join

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

有人能解释一下为什么在 mysql 中左加入两个视图这么慢吗?

这是我昨天问的一个问题 - /sf/ask/1552650921/

我得到了一个很好的答案,对我有帮助,但我不明白为什么 LEFT JOIN 比查找慢得多。LEFT JOIN 是 16 秒 - 我很确定我的表至少优化了 90% - 在进行查找时它只有 0.14 秒。当我 LEFT JOIN 表时,它并没有那么慢,为什么要查看?

mysql join view

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

MySQL 中 IN (42) 和 id = 42 之间的性能差异是什么?

之间是否有任何性能差异

SELECT * 
FROM table 
WHERE id IN (42);
Run Code Online (Sandbox Code Playgroud)

SELECT * 
FROM table 
WHERE id = 42;
Run Code Online (Sandbox Code Playgroud)

?

问题是只提供一个值。对我来说,自然的假设是优化器将它们视为平等并在获取数据时执行相同的优化。但这是正确的吗?

mysql performance query-performance

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

Innodb 缓冲池和多个连接

假设我们有 10 亿条记录,并希望通过 post_type将它们存储在OneThree表中。

post_id   -> primary key  
post_type -> ( page, group, user )
user_id   -> index
date      -> index
Run Code Online (Sandbox Code Playgroud)

注意:我们有足够的 RAM 来存储缓冲池中的所有数据。( 大约 40 GB )
在我们的情况下,Reading数据库太多了

问题是:WHILE整个数据为ON缓冲池(RAM),有什么不同in performance3分离表和Join他们,或有1大表,并Select从它没有任何Join

在某些情况下,我们最好为其他类型的轻型查询使用单独的表。
但我们害怕JOINS

mysql innodb performance join

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

嵌套 UPDATE 查询的问题

我无法进行更新查询。作为第一步,以下步骤可以正常工作:

UPDATE Tab1  
SET Tab1.a = '3'
WHERE
    Tab1.id IN ( 123, 456 );
Run Code Online (Sandbox Code Playgroud)

其中 id 是 Tab1 的主键。
但是,当我添加一个选择以获取 Tab1.id 必须在的值集时,我收到以下 MySQL 错误:

错误代码:1093
不能在 FROM 子句中指定目标表“Tab1”进行更新。

这是完整的查询:

UPDATE Tab1  
    SET Tab1.a = '3'
    WHERE
        Tab1.id IN ( 
            SELECT Tab1.id 
            FROM Tab1, Tab2 
            WHERE Tab1.b = Tab2.b AND Tab1.c = '4'
        );
Run Code Online (Sandbox Code Playgroud)

我看不出如何解决这个错误。
我是否被迫将此查询一分为二?

谢谢!

mysql update

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