MySQL SELECT查詢包含大量字段時,索引失效的原因是什么?

MySQL SELECT查詢包含大量字段時,索引失效的原因是什么?

mysql select查詢指定字段對索引失效影響

問題描述:

有一條select查詢,包含大量字段,在某些情況下會使用索引,而在另一些情況下則不會。當查詢中注釋掉其中一個字段時,索引就會被使用。

表結構:

create table base_project_court (   id varchar(32) not null,   name varchar(30) not null,   ... );  create table dev_device_log (   id bigint(20) not null,   court_id varchar(32) not null,   ... );

分析:

當查詢中包含字段pc.name時,mysql優化器會認為回表獲取數據效率較低,因此會使用全表掃描而不是索引。這是因為id字段是varchar(32)類型,在utf8mb4字符集下,每個字符占用4個字節,這意味著id字段的鍵長為130字節。當查詢中包含大量字段時,優化器會權衡使用索引和全表掃描的成本,并選擇成本較低的方法。

當注釋掉pc.name字段時,僅需要使用id字段作為查詢條件,優化器認為使用索引可以更有效率。因此,此時查詢會走索引。

解決方法:

為了解決此問題,可以在base_project_court表上為id和name字段添加一個聯合索引:

ALTER TABLE base_project_court ADD INDEX idx_id_name (id, name);

此索引可以提高查詢速度,即使查詢包含pc.name字段,也可以使用索引。

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