mysql - sql查询在大数据上需要时间

标签 mysql sql phpmyadmin

我试图删除表名 pincodecheck 中的重复条目,但每当我在 phpMyAdmin 中运行 sql 查询时,它都会显示正在加载,但没有任何反应。

该表包含大约 1,500,000 个条目,因此只取该表的一小部分来说明问题。

我正在运行的sql查询:

DELETE FROM pincodecheck WHERE pinId NOT IN
(SELECT MIN(pinId) FROM (SELECT * FROM pincodecheck) AS tmpTable GROUP BY pincode)

表结构

pinId   pincode deliveryStatus  divisionName    regionName  circleName  taluk   districtName stateName
146859  700031  Delivery        Calcutta South  Calcutta    West Bengal Kolkata Kolkata      WEST BENGAL
146860  700031  Delivery        Calcutta South  Calcutta    West Bengal Kolkata Kolkata      WEST BENGAL
146861  700031  Delivery        Calcutta South  Calcutta    West Bengal Kolkata Kolkata      WEST BENGAL

最佳答案

神圣的嵌套 SELECT。

首先,移除第三个巢。 DELETE FROM pincodecheck WHERE pinId NOT IN (SELECT min(pinID) from pincodecheck GROUP BY pincode) 应该没问题。

如果您在从同一个表中删除时实际上想使用 tmpTable 来存储值,则实际插入到 tmp 表中并在子查询中使用它。仅仅使用别名不会有任何作用。

您可能需要将 EXPLAIN 粘贴在此查询的前面,看看是否可以识别出任何可能导致返回缓慢的步骤。我的猜测是MySQL将首先执行子查询获取min(PID),然后使用它从pincodecheck中删除。

编辑添加:

这可能只是需要很长时间的情况。如果 SELECT min(pinId) FROM pincodecheck GROUP BY pincode 的结果非常大(我认为它们是一个重复数据删除练习),那么 mysql 将花费很长时间。它必须根据该查询返回的内容检查 pincodecheck 中的每个单独记录。

也许...您可以做的是编写一个查询来获取您想要的最终结果,然后使用它插入到新表中,删除旧表,然后重命名新表以取代它。像这样的东西:

CREATE TABLE <newtable> AS 
    SELECT * 
    FROM 
        pincodecheck main
        LEFT OUTER JOIN
            (
                SELECT pincode, min(pinId) as minPinId
                FROM pincodecheck
                GROUP BY pincode
            ) sub ON
            main.pincode = sub.pincode and
            main.pinId = sub.MinPinId
    WHERE
        sub.pinCode IS NULL

关于mysql - sql查询在大数据上需要时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26384362/

相关文章:

php - 我应该如何开始这个项目?

java - java中utf8的问题

mysql - 在嵌套 sql 命令中查找值

java - 由于插入查询中的单引号导致的错误

mysql - SQL从多个表中获取值然后对其进行排序

php - fatal error : Out of memory (allocated 1134559232) (tried to allocate 32768 bytes) in X:\wamp\www\xxx

mysql - 获取与 mysql 表不同的数据会得到错误的结果

mysql - 如果一个值是另一列SQL中的某个值,如何从列中删除所有相同的值

php - 如何在MySQL中动态插入数据

mysql - 通过本地 phpMyAdmin 的 Google Cloud SQL 实例