MySql 查询中的性能问题

标签 mysql database performance

我是一个使用 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 秒才能返回响应。

  1. 我应该对该表应用哪些初始方法来提高性能?

  2. MySql 是处理包含大约 5-1000 万条记录的大表的正确工具吗?或者我应该转向另一个工具?

最佳答案

假设serial是某种数字数据类型...

您只需ADD INDEX一次。通常,您会在创建表时预见到索引的需要并以非常便宜的方式添加它。

既然您已经在 serial 上建立了索引,那么使用 123 以外的任何值进行选择,都会运行得非常快。

如果只有一行serial = 123,则索引表将在毫秒内吐出该行,无论它有 700 万行还是 70 亿行。

如果 serial = 123 显示在表的 1% 中,则查找所有 70M 行(7B 中)将比查找所有 70K 行(7M 中)花费更长的时间。

索引是你的 friend !

如果serialVARCHAR,那么...

计划 A:将 serial 更改为数字类型(如果适用),或者

B 计划:在 123 两边加上引号,以便将字符串与字符串进行比较!

关于MySql 查询中的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33424008/

相关文章:

java - 管理 Java 中的异常

javascript - 我可以通过在对象中定位属性来提高查找速度吗?

php - 带有变量的 MySQL 存储过程第一步错误#1111

mysql - 是否有任何好的 MySQL 工具可以 "listen"到我的数据库选择查询并告诉我需要索引什么?

python - Python中的MySQL,MATCH和注入(inject)攻击

performance - AWS EC2 高 ping 和 S3 下载慢

java - 传递接口(interface)和重新加载类之间的性能差异

php - 包含分号的数据加载数据错误

php - 从mysql获取数据库

c++ - 如何在 Qt 中创建 SQLite 数据库