【发布时间】:2013-07-14 21:51:30
【问题描述】:
我有一个 MYSQL 数据库,其中一个表以每秒 5,000 行的速度增长。我希望这张表能进入数十亿条记录。我现在在php中有一个查询功能:
$result =mysqli_query($con, "SELECT * FROM table WHERE `data`='".$input."' LIMIT 0 , 30");
问题很明显,表越大,查询最新记录的时间就越长。到了这一点,该功能刚刚超时。如果我直接从 sql 运行相同的查询,它会做同样的事情。
有没有更好的方法来查询这个表来加快查询时间。是否可以从最后一条记录开始查询,第一条记录并在两者之间递增查询以加快速度?
另外,如果有更快的替代方案,请告诉我。
另外,将表拆分为多个表并在多个较小的表上同时运行查询会更好吗?
【问题讨论】:
-
你有索引吗?您的查询没有
ORDER BY子句,因此MySQL 会猜测如何对记录进行排序,并且很可能会做出错误 的猜测。在索引列上添加ORDER BY- 没有一个,顺序无论如何都不是确定性的。 -
我还要补充一点,
SELECT *几乎从不属于生产代码。虽然它不应该减慢查询速度,但它可能会影响 MySQL 选择排序的列。始终明确说明您实际需要的列。 -
您可以尝试在
data列上建立索引,但这会因为必须在每次 INSERT 上更新索引而减慢您的更新速度。您或许可以通过使用INSERT DELAYED来缓解这个问题,或者缓冲您的输入并使用单个INSERT语句添加大块更新。 -
在某些时候磁盘访问时间也会成为一个问题。如果我遇到这种情况,我会寻求专业的外部帮助 :-) 分片,水平分区,在这个级别上你需要知道的各种事情
标签: mysql sql performance