我在查询几个MySQL VIEWS时遇到了问题。
MySQL表每小时从一个从中央Oracle数据库中提取数据的进程生成。更新完成后,查询会自动更新VIEWS。 (我相信这是标准的。我可能是错的)。
此时,我正在使用PHP查询所述VIEWS以将数据返回到页面。这是我的问题开始的地方。
查询开始时,返回4条记录可能需要30多秒。 VIEW包含不超过30K的记录。但是当我尝试将更大的数据集返回到页面时,它现在会导致服务器冻结。
我的PHP脚本中的查询非常简单。它看起来如下:
SELECT
DISCHARGE_ETA,
TERMINAL_DISCH,
IMPORT_RAMP,
ORIG_RAMP_FINAL_DEST_ETA,
POOL_LOCATION_FROM_IMP,
POOL_LOCATION_TO_IMP,
ROAD_HAULIER_IMP
// few more columns
FROM
view1
WHERE
" . $_SESSION['where'] . ";
我正在使用jQuery将参数发送到PHP脚本。然后,PHP通过将所有参数插入WHERE子句来构建查询。然后通过JSON返回数据。
在MySQL中构建实际VIEW的查询更加强烈(目前未在此处显示)。
我的问题是:VIEWS是检索我需要的数据的最佳途径吗?
我认为查询TABLE而不是VIEW似乎更容易。也许更新VIEWS的相同每小时进程可以改为更新单个TABLE。这样,我可以查询TABLE而不是VIEW。
这是最好的选择吗?如果没有,请告诉我是否有其他选择。
以下是EXPLAIN的结果