我是一个使用 MySql 的新手。我正在查看一张大约有 200,000 个数据的表 记录。当我执行一个简单的操作时:
SELECT * FROM X WHERE Serial=123
需要很长时间,大约 15-30 秒才能返回响应(200,000 行)。
在添加索引之前,需要大约 50 秒(700 万秒)才能返回一个简单的 select where 语句。 该表的行数每天都在增加。现在它有 700 万行。我通过以下方式添加了索引:
ALTER TABLE `X` ADD INDEX `index_name` (`serial`)
现在需要 109 秒才能返回响应。
我应该对该表应用哪些初始方法来提高性能?
MySql 是处理包含大约 5-1000 万条记录的大表的正确工具吗?或者我应该转向另一个工具?
最佳答案
假设serial
是某种数字数据类型...
您只需ADD INDEX
一次。通常,您会在创建表时预见到索引的需要并以非常便宜的方式添加它。
既然您已经在 serial
上建立了索引,那么使用 123
以外的任何值进行选择,都会运行得非常快。
如果只有一行serial = 123
,则索引表将在毫秒内吐出该行,无论它有 700 万行还是 70 亿行。
如果 serial = 123
显示在表的 1% 中,则查找所有 70M 行(7B 中)将比查找所有 70K 行(7M 中)花费更长的时间。
索引是你的 friend !
如果serial
是VARCHAR
,那么...
计划 A:将 serial
更改为数字类型(如果适用),或者
B 计划:在 123
两边加上引号,以便将字符串与字符串进行比较!
关于MySql 查询中的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33424008/