gpt4 book ai didi

MySQL查询,如何更好地优化它

转载 作者:太空宇宙 更新时间:2023-11-03 12:05:23 24 4
gpt4 key购买 nike

我有以下查询一一执行

delete FROM secure_dl_ipmap WHERE timestamp < (NOW() - INTERVAL {$days} DAY)

SELECT null FROM secure_dl_ddown d WHERE d.id = id_file

delete FROM secure_dl_ddown WHERE id NOT IN (SELECT i.id_file FROM secure_dl_ipmap i)

secure_dl_ddown

  • id:int(10)
  • 实际链接:文本
  • 假名:varchar(100)
  • 推荐人:text
  • 大小:int(11)

没有索引。 id, actuallink, whoreferred 是主要的

大约 10 万行;

secure_dl_ipmap

  • id:int(10)
  • id_file:int(10)
  • ip地址:varchar(15)
  • dccode:varchar(30)
  • 时间戳:时间戳
  • 引用:文本

没有索引。 id & refer 设置为主

大约 10 万行;

您对如何更改查询以及是否需要为表编制索引有任何想法吗?

最佳答案

secure_dl_ipmap.timestamp 上添加一个 BTREE 索引,在 secure_dl_ddown.id 上添加一个 HASH 索引:

ALTER TABLE secure_dl_ipmap ADD INDEX idIdx USING BTREE (timestamp);
ALTER TABLE secure_dl_ddown ADD INDEX idIdx USING HASH (id);

背景是 BTREE 索引最适合用于范围查询(比如您的“低于”)。 HASH 索引在“相等”选择器上很快。

编辑

要加快DELETE 操作,您可以使用DELETE QUICK FROM ...,如here所述:

If you are going to delete many rows from a table, it might be faster 
to use DELETE QUICK followed by OPTIMIZE TABLE.
This rebuilds the index rather than performing many index block
merge operations.

EDIT2

按照同一页面上的提示试试这个:

DELETE secure_dl_ddown 
FROM secure_dl_ddown
LEFT JOIN secure_dl_ipmap ON secure_dl_ddown.id=secure_dl_ipmap.id_file
WHERE secure_dl_ipmap.id_file IS NULL

(要删除 t1 中存在但在 t2 中没有匹配项的行,请使用 LEFT JOIN)

关于MySQL查询,如何更好地优化它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26874954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com