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