我有一个包含两列的MySQL数据库。 '键'和'使用'。 Key是一个字符串,Used是一个整数。是否有一种非常快速的方法来搜索特定的密钥,然后在具有6000000行数据的巨大MySQL数据库中返回使用。
答案 0 :(得分:2)
您可以通过在key
字段上创建索引来加快速度:
CREATE INDEX mytable_key_idx ON mytable (`key`);
通过在(key, used)
个字段上创建覆盖索引,您实际上可以更快地进行阅读:
CREATE INDEX mytable_key_used_idx ON mytable (`key`, `used`);
在这种情况下,当读取时,MySQL可以从索引本身检索used
值,而无需读取表(仅索引扫描)。但是,如果您有大量的写入活动,覆盖索引可能会更慢,因为现在它必须同时更新索引和实际表。
答案 1 :(得分:0)
规范性的SQL将是:
SELECT t.key, t.used FROM mytable t WHERE t.key = 'particularvalue' ;
的输出
EXPLAIN
SELECT t.key, t.used FROM mytable t WHERE t.key = 'particularvalue' ;
将提供有关访问计划,正在考虑的索引等的详细信息。
的输出
SHOW CREATE TABLE mytable ;
将提供有关表,正在使用的引擎和可用索引以及数据类型的信息。
此类查询的性能下降通常表示次优访问计划,因为合适的索引不可用或未被使用。有时,列数据类型与谓词中的文字数据类型之间的字符集不匹配会使特定查询的索引“无法使用”。