【问题标题】:PHP times out and PHPmyadmin crashes on query with NOT INPHP 超时,PHPmyadmin 在查询时崩溃,NOT IN
【发布时间】:2013-01-29 13:14:29
【问题描述】:

我在一个数据库中有两个表。 Table1存储用户,Table2存储用户生成的数据。

由于表 1 中的一些用户出错,表 2 中没有任何数据。我想通知这些用户。

我正在使用 MySQL 以多种方式进行尝试。但没有任何效果,因为 PHPmyAdmin 冻结或 PHP 超时。这可能是因为第一个表包含 28.000 行,而第二个表包含 80.000 行。我只需要最后 5 天。

试用版 1

SELECT gebruikers.g_id
FROM gebruikers LEFT JOIN objecten ON objecten.o_g_id=gebruikers.g_id
WHERE objecten.o_g_id IS NULL

解释选择

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra
1   SIMPLE  gebruikers  index   NULL    PRIMARY     4   NULL    25227   Using index
1   SIMPLE  objecten    ALL     NULL    NULL    NULL    NULL    81002   Using where; Not ex

试用版 2

SELECT g_id FROM gebruikers
WHERE g_id NOT IN(SELECT o_g_id FROM objecten WHERE o_startdatum <= NOW() AND o_startdatum >=NOW() - INTERVAL 5 DAY)

我做错了什么?

【问题讨论】:

  • 80,000 行对于 MySQL 来说是非常少量的数据,它根本不应该挂在这上面,除非它运行在低端服务器上。 o_startdatum 是什么类型的字段?是日期还是日期时间?如果是日期,您是否在此字段上定义了索引?如果它是日期时间 - 最好创建一个 DATE 列(仅包含该字段的日期部分)并将其编入索引。另外,您希望这会返回多少结果?也许 phpMyAdmin 正在输出数据。
  • 请包含解释查询的结果,EXPLAIN SELECT gebruikers.g_id...
  • @mat 是的,绝对让我们看看 Igor 提到的EXPLAIN。并在两张表上发布DESCRIBE 的输出。
  • 试试:SELECT gebruikers.g_id FROM gebruikers LEFT JOIN objecten ON objecten.o_g_id = gebruikers.g_id WHERE objecten.o_g_id IS NULL and o_startdatum &lt;= NOW() AND o_startdatum &gt;= (NOW() - INTERVAL 5 DAY);
  • @mat in phpmyadmin 在表格的结构视图中,在提到的每个列上将鼠标悬停在“更多”上,然后选择“添加索引”。分别对每一列执行此操作。

标签: php mysql


【解决方案1】:

查询以获取所需记录:

SELECT 
    gebruikers.g_id
FROM
    gebruikers
        LEFT JOIN
    objecten ON objecten.o_g_id = gebruikers.g_id
WHERE
    objecten.o_g_id IS NULL
        and o_startdatum <= NOW()
        AND o_startdatum >= (NOW() - INTERVAL 5 DAY);

【讨论】:

    【解决方案2】:

    "Trial nr 1" 如果第二个表有空值,但它可能是字段值空而不是空,所以你应该使用 or 子句 objecten.o_g_id = ''。 最终查询将是: SELECT gebruikers.g_id FROM gebruikers LEFT JOIN objecten ON objecten.o_g_id=gebruikers.g_id WHERE (objecten.o_g_id IS NULL) or (trim(objecten.o_g_id) ='')

    【讨论】:

    • 实际上,这不会得到 OP 想要的。
    猜你喜欢
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 2017-09-14
    • 2023-03-19
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多