Php 如何加快查询速度?

Php 如何加快查询速度?,php,mysql,laravel,laravel-5.1,Php,Mysql,Laravel,Laravel 5.1,我在我的项目中使用PHP Mysql,我有一个包含30000多行的表 当我的代码访问该表时,请求时间太长 我怎样才能提高速度?或者用什么方法 我使用的是Laravel5.1。我的代码如下(不必担心是否正确): 表Games有30000多行,我对表Games使用了index(id) 更新:我一次只需要1~300条记录。但是查询请求的时间太长。我认为来自表游戏的问题有这么多行。我正在寻找解决办法。我尝试了一些方法:为表游戏设置索引,只需选择我需要的字段(游戏名称、类别名称) 对我的英语感到抱歉 你真

我在我的项目中使用PHP Mysql,我有一个包含30000多行的表

当我的代码访问该表时,请求时间太长

我怎样才能提高速度?或者用什么方法

我使用的是Laravel5.1。我的代码如下(不必担心是否正确):

Games
有30000多行,我对表
Games
使用了
index
(id)

更新:我一次只需要1~300条记录。但是查询请求的时间太长。我认为来自表
游戏
的问题有这么多行。我正在寻找解决办法。我尝试了一些方法:为表
游戏设置
索引
,只需选择我需要的字段(游戏名称、类别名称)

对我的英语感到抱歉

  • 你真的一次需要3000条记录吗?考虑分页/拆分为多个部分
  • 在Laravel模型中,$visible$hidden属性决定要序列化的列
  • 如果通过toArray()toJson()方法序列化模型,则只能获得所需的信息

  • 按照上面@miikes的建议使用分页

  • 分类表中的id_游戏也被索引了吗?如果没有索引的话

  • 如果使用Mysql Workbench,请尝试查看执行计划并进行相应调整


  • 正如其他人所说,最有可能的两种解释是:

  • 30000条记录需要很长时间才能读取、传输、处理并放入阵列中。(您可能还会看到PHP占用了大量内存…)

  • 有些地方缺少索引

  • 使用
    EXPLAIN
    可以识别索引的缺失。我这里不谈细节,你可以。首先,我要再次检查
    连接上是否有适当的索引

    但您的查询实际上非常简单。因此,“感知的”查询持续时间的可能性更大。MySQL读取所有这些记录、将它们放入内存、格式化、通过TCP/IP堆栈传递、PHP接收它们、将它们处理成数组等都需要相对较长的时间

    考虑(正如其他人已经说过的)使用
    LIMIT
    子句来减少返回的记录数。(主键按
    顺序索引将确保对给定的
    限制
    语句始终获得相同的结果。)

    最后(但我怀疑这是最低可能性):我们看不到表结构。它们很宽吗?可能是
    BLOB
    TEXT
    内的字段?如果我们假设一条平均记录很大(比如2KB),那么30000条记录将是58MB的数据。首先在PHP中缓存一些较大的查找数据可能比较合适


    我还想到,你可能陷入了解决一个根本不存在的问题的常规

    您返回了所有内容,但您是否实际使用了下面代码中的所有内容?(您已经说过一次只需要约300行。)

    我曾在一些大型数据库上工作过(我肯定其他人也有过)——有时需要改变的是问题,而不是解决方案


    数据库的规范化在学术上是好的,但在现实中可能真的很糟糕。不要担心为了高效、汇总的缓存而复制数据。考虑改变问题,以便处理更少的数据。通过事务安全的存储过程强制更新和删除可以让您两全其美。

    如果您可以玩游戏,为什么需要使用->选择():“where('id',$id)->get()->toArray()@对不起,我经常不使用->选择()。当我想选择表中的某个字段时,我只是选择()。问题更新为什么返回30000行?这是真正的问题?@Ohgodwhy Table
    Games
    太大,一些代码在访问Table
    Games
    时请求的时间太长。以前,表
    Games
    很小,查询速度很快,但现在很低。你们有解决这个问题的办法吗?你们能给我们看看你们的桌子吗?谢谢你们的回答!我一次只需要1~300张唱片。但是查询请求的时间太长。我认为table
    游戏中的问题有很多行。尝试使用skip和take方法限制查询:
    $users=DB::table('users')->skip(10)->take(5)->get()
    也许你是对的,我的表格有一个
    文本
    字段,包含80~5000个单词。而我的查询联接3~4表,我得到的有限记录是200条。我的数据库大约90MB。谢谢你的回答!我从每个人的角度都在努力。
    Games::join('categories', 'categories.id_game', '=', 'games.id')->where('games.id', $id)
    ->select('games.*', 'categories.name')->get()->toArray();
    
    protected $visible = ['id', 'name', 'age'];