update ipccpcdr i left join asterisk.queues_info q on i.Queue = q.queue_index set i.area_id = q.area_id where i.area_id='' limit 1000 优化之后的语句
时间: 2024-02-12 18:05:23 浏览: 218
update 语句优化
以下是一个可能的优化后的 SQL 语句:
```
UPDATE ipccpcdr AS i
LEFT JOIN asterisk.queues_info AS q ON i.Queue = q.queue_index
SET i.area_id = q.area_id
WHERE i.area_id='' AND q.area_id IS NOT NULL
ORDER BY i.id
LIMIT 1000;
```
这个 SQL 语句做了以下优化:
1. 在 `ipccpcdr` 表的 `Queue` 字段和 `asterisk.queues_info` 表的 `queue_index` 字段上创建索引,以加快连接过程和查询速度。
2. 增加 `ORDER BY i.id`,以确保每次更新的记录顺序是稳定的,避免因为顺序不稳定导致的死锁问题。
3. 添加了 `q.area_id IS NOT NULL` 的条件,以避免将 `i.area_id` 更新为 `NULL` 值。
4. 将 `WHERE` 和 `LIMIT` 子句的顺序调整,以优化查询效率。
5. 每次更新1000条记录,多次执行该语句以更新全部符合条件的记录。
请注意,以上仅是一种可能的优化方案,具体的优化策略需要根据实际情况进行选择和调整。
阅读全文