相关疑难解决方法(0)

子查询与连接

我重构了一个从另一家公司继承的应用程序的缓慢部分,以使用内部连接而不是子查询

WHERE id IN (SELECT id FROM ...)
Run Code Online (Sandbox Code Playgroud)

重构的查询运行速度提高了约100倍.(约50秒到约0.3)我预计会有所改善,但任何人都可以解释为什么它如此激烈?where子句中使用的列都已编入索引.SQL是否每行执行一次where子句中的查询?

更新 - 解释结果:

不同之处在于"where in in()"查询的第二部分 -

2   DEPENDENT SUBQUERY  submission_tags ref st_tag_id   st_tag_id   4   const   2966    Using where
Run Code Online (Sandbox Code Playgroud)

vs 1带连接的索引行:

    SIMPLE  s   eq_ref  PRIMARY PRIMARY 4   newsladder_production.st.submission_id  1   Using index
Run Code Online (Sandbox Code Playgroud)

mysql sql performance database-design join

157
推荐指数
9
解决办法
6万
查看次数

从一个表中选择另一表中存在列值的记录

我有 2 个 MySQL 表 A 和 B。

我只想从 B 中选择 A 中存在某个值的记录。

例子:

A 有列:aID、Name

B 有列:bID、aID、Name

我只想要 A 中存在 aID 的 B 中的记录。

非常感谢。

mysql select join

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

使用参数抛出无效参数号的SQL

所以我试图在SQL中使用"LIKE",基本上是为了看一个玩家是否已经在一个团队中.这是我的代码:

    $checkifonlytwo = "SELECT * FROM sg_turn_teams WHERE joinid = :joinid AND players LIKE '%:ownerid,%'";
    $paramstwo = array(
        ":joinid" => $joinid,
        ":ownerid" => $_SESSION['user']['id']
    );
    try{
    $stmttwo = $db->prepare($checkifonlytwo);
    $resulttwo = $stmttwo->execute($paramstwo);
    }
    catch(PDOException $ex){
        die("Failed to run query #2: " . $ex->getMessage());
    }
Run Code Online (Sandbox Code Playgroud)

另外你可以看到我希望它是LIKE '%1,%'例如,所以最后的逗号也是如此.

我的表结构看起来像这样. 表结构

编辑,玩家将会像没有名字的"1,2,3",因为用户可以更改他们的名字.图片有名字,但它应该是1,2,3

php mysql sql

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

SELECT WHERE IN(子查询)慢

我在这里尝试了解决方案,但它不起作用.

我的桌子是这样的:

   `Index`  uid   dept
...........................
      1    001   dept1
      2    001   dept2
      3    001   dept3
      4    002   dept2
      5    002   dept3
      6    002   dept4
      7    003   dept1
      8    003   dept5
      9    004   dept1
      10   004   dept6
Run Code Online (Sandbox Code Playgroud)

我想要检索具有特定的所有行dept.也就是说,如果我想要检索dept1,我想检索除uid = 002之外的所有行,因为dept1uid = 002 没有.

即使使用索引,查询字符串也很慢:

SELECT id FROM table WHERE uid IN
(SELECT uid WHERE dept='dept1')
Run Code Online (Sandbox Code Playgroud)

我之前没有使用WHERE IN的版本如下:

首先使用dept = dept1检索所有uid.
然后对第一个查询中检索到的所有uid使用for循环.

对于在第一个查询中检索的少量(100)行,此方法非常快.但是,它似乎不是一个好的解决方案,因为它会产生大量的查询(每个查询都非常快).

mysql performance select subquery where-clause

0
推荐指数
1
解决办法
6387
查看次数

用于连接的SQL语句,但不在其他表中

我有两张桌子:customermailing:

+==========+  +=============+
| customer |  | mailing     |
+==========+  +=============+
| id       |  | id          |
+----------+  +-------------+
| name     |  | customer_id |
+----------+  +-------------+
              | mailing_id  |
              +-------------+
Run Code Online (Sandbox Code Playgroud)

每次我向客户发送邮件时,我都会在邮件表中添加一行邮件ID.一封邮件可以发送给多个客户.

我想要一个sql调用,返回所有尚未收到某个邮件的客户.如何 ?

我正在使用mysql

mysql sql select

0
推荐指数
1
解决办法
86
查看次数

标签 统计

mysql ×5

select ×3

sql ×3

join ×2

performance ×2

database-design ×1

php ×1

subquery ×1

where-clause ×1