MySQL 刪除數據時,是否會使用索引?以聯合索引為例,如何判斷刪除操作是否會使用索引?

MySQL 刪除數據時,是否會使用索引?以聯合索引為例,如何判斷刪除操作是否會使用索引?

mysql 刪除數據時是否走索引?

在一個包含 id、name、age、sex、work 和 city 字段的用戶表中,假設存在聯合索引 (sex, city)。當想要刪除 sex=男、city=北京 的數據時,是否會使用聯合索引?

答案:

mysql 中,是否存在以下情況會影響索引的使用:

  • 符合條件的數據量:涉及的數據量超過 20% 時,不會使用索引。
  • 查詢的類型:刪除操作屬于數據修改語句,而不是查詢語句,因此索引的使用規則可能不同。

實踐驗證:

下面是在表中創建數據總條數為 1602、符合刪除條件 sex=女、city=廣州 的數據條數為 604 的情況下進行刪除操作的 explain 結果:

mysql> explain delete from test_del_idx where sex="女" and city = "廣州"; +----+-------------+--------------+------------+------+---------------+------+---------+------+------+----------+-------------+ | id | select_type | table        | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       | +----+-------------+--------------+------------+------+---------------+------+---------+------+------+----------+-------------+ |  1 | DELETE      | test_del_idx | NULL       | ALL  | idx_sex_city  | NULL | NULL    | NULL | 1602 |   100.00 | Using where | +----+-------------+--------------+------------+------+---------------+------+---------+------+------+----------+-------------+

結果表明,雖然符合條件的數據量不足 20%,但刪除操作沒有使用聯合索引。這是因為刪除操作不是查詢操作,而是數據修改操作。

結論:

在 mysql 中,刪除操作是否使用索引取決于多種因素,包括符合條件的數據量和操作類型等。在某些情況下,即使涉及的數據量較少,刪除操作也可能不會使用索引。

? 版權聲明
THE END
喜歡就支持一下吧
點贊8 分享