gpt4 book ai didi

MySQL拒绝使用索引进行简单查询

转载 作者:行者123 更新时间:2023-11-29 13:31:11 25 4
gpt4 key购买 nike

我有一个表,正在对其运行一个非常简单的查询。我已经在表的高基数列上添加了索引,因此 MySQL 应该能够几乎立即缩小结果范围,但它每次都会进行全表扫描。为什么 MySQL 不使用我的索引?

mysql> select count(*) FROM eventHistory;
+----------+
| count(*) |
+----------+
| 247514 |
+----------+
1 row in set (0.15 sec)

CREATE TABLE `eventHistory` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`whatID` varchar(255) DEFAULT NULL,
`whatType` varchar(255) DEFAULT NULL,
`whoID` varchar(255) DEFAULT NULL,
`createTimestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `whoID` (`whoID`,`whatID`)
) ENGINE=InnoDB;

mysql> explain SELECT * FROM eventHistory where whoID = 12551\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: eventHistory
type: ALL
possible_keys: whoID
key: NULL
key_len: NULL
ref: NULL
rows: 254481
Extra: Using where
1 row in set (0.00 sec)

我也尝试将 FORCE INDEX 添加到查询中,但它似乎仍在进行全表扫描。查询的性能也很差。目前找到合适的行大约需要 0.65 秒。

最佳答案

上述答案让我意识到两件事。

1) 使用VARCHAR索引时,查询条件需要加引号,否则MySQL将拒绝使用该索引(隐式幕后转换?)

SELECT * FROM foo WHERE column = '123'; # do this
SELECT * FROM foo where column = 123; # don't do this

2)如果可能的话,最好使用/索引 INT。

关于MySQL拒绝使用索引进行简单查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19434171/

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