使用和不使用索引查询mysql会返回完全不同的结果

时间:2014-01-21 12:14:06

标签: python mysql indexing alter-table

我有一张表格可以保存我的付款记录。它有订阅者ID字段...所以当我在没有索引的情况下查询这个字段时,它返回4个值,如此...

select count(id) from `mydb`.`sale_transaction` where subscriber_guid='4d03a32c-3dca-472b-a1db-0dfb0f66e64d';
+-----------+
| count(id) |
+-----------+
|         4 |
+-----------+
1 row in set (0.31 sec)

所以我想更快地通过这个字段获取数据,我添加了一个像这样的索引......

alter table sale_transaction add index subscriber_guid_index(subscriber_guid);
Query OK, 0 rows affected (1.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

然后再次查询...

select count(id) from `mydb`.`sale_transaction` where subscriber_guid='4d03a32c-3dca-472b-a1db-0dfb0f66e64d';
+-----------+
| count(id) |
+-----------+
|         0 |
+-----------+
1 row in set (0.00 sec)

如果我删除索引,它会再次起作用......

alter table sale_transaction drop index subscriber_guid_index;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

select count(id) from `mydb`.`sale_transaction` where subscriber_guid='4d03a32c-3dca-472b-a1db-0dfb0f66e64d';
+-----------+
| count(id) |
+-----------+
|         4 |
+-----------+
1 row in set (0.29 sec)

以前没见过这样的东西,我的错是什么?

2 个答案:

答案 0 :(得分:1)

问题消失了

OPTIMIZE TABLE sale_transaction;

现在我可以根据subscriber_guid进行查询。

答案 1 :(得分:0)

我认为问题是因为:

ft_min_word_len变量设置不准确。

参见:

http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_ft_min_word_len