Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 带有自定义字段的大型可搜索和可排序表_Database_Performance_Laravel_Architecture_Database Optimization - Fatal编程技术网

Database 带有自定义字段的大型可搜索和可排序表

Database 带有自定义字段的大型可搜索和可排序表,database,performance,laravel,architecture,database-optimization,Database,Performance,Laravel,Architecture,Database Optimization,我在MySQL数据库中有一些大表(大约100000行)。我正在尝试优化一个web应用程序前端,它允许搜索、排序和过滤从这些表计算的值。这些值有各种类型-通过联接和一些半复杂计算获得 对于这类问题,有哪些最佳实践/常见设计模式?我主要关心的是代码的可读性和性能。我使用的是PHP框架Laravel,我已经放弃了Eloquent(其ORM),以便通过在一个原始SQL查询中执行所有操作来挤出一些额外的速度-但是这是可读性差得多且不理想的。它还不够快。我已经为所有涉及计算、连接和where语句以及实现分页

我在MySQL数据库中有一些大表(大约100000行)。我正在尝试优化一个web应用程序前端,它允许搜索、排序和过滤从这些表计算的值。这些值有各种类型-通过联接和一些半复杂计算获得


对于这类问题,有哪些最佳实践/常见设计模式?我主要关心的是代码的可读性和性能。我使用的是PHP框架Laravel,我已经放弃了Eloquent(其ORM),以便通过在一个原始SQL查询中执行所有操作来挤出一些额外的速度-但是这是可读性差得多且不理想的。它还不够快。我已经为所有涉及计算、连接和where语句以及实现分页结果的列编制了索引。

您分析了已执行SQL的查询计划吗?我知道,对于oracle,但不是mysql,您可以找到一个工具来分析SQL查询执行计划,检查查询计划是否通过索引,如果没有添加任何提示。如果仍然较大,请在代码中拆分为2个小查询和union或process..首先使用EXPLAIN运行查询,查看它是否使用任何索引以及是否存在任何子查询。请注意,MySQL只能为查询的每个子部分使用一个索引,因此请确保将所有相关字段都包含在同一个索引中。在SQL世界中,低于100万的任何内容都不算大,但要在搜索结果的第一页开始。没有什么比将10万行返回给userWell更糟糕的了,如果您在没有相关键的情况下加入,即使只有几千行的问题也会快速增长。连接两个表,每个表有3k行,意味着要考虑3000^2=900万个组合!这就是为什么你需要用解释来分析问题。问题大小(在大多数情况下)是通过将EXPLAIN输出的
列中的数字相乘得出的。