Php 连接两个Mysql视图需要很长时间

Php 连接两个Mysql视图需要很长时间,php,mysql,join,view,Php,Mysql,Join,View,我有一个文本框,我在PHP表单中使用了jQuery自动完成功能,用户可以在其中插入演员姓名,然后单击搜索按钮,打开一个新窗口,显示该演员的电影列表 这是一个查询,其中我按演员姓名获取电影: $query = $conn->prepare("SELECT DISTINCT c.movieName, c.castName, c.movieImdbId, f.year, f.posterLink FROM cast_movie as c JOIN film_info as f ON c.Imdb

我有一个文本框,我在PHP表单中使用了jQuery自动完成功能,用户可以在其中插入演员姓名,然后单击搜索按钮,打开一个新窗口,显示该演员的电影列表

这是一个查询,其中我按演员姓名获取电影:

$query = $conn->prepare("SELECT DISTINCT c.movieName, c.castName, c.movieImdbId, f.year, f.posterLink FROM cast_movie as c JOIN film_info as f ON c.ImdbId = f.ImdbId WHERE c.castName = :q");
 $query->execute(array(':q' => $searchText ));
我的问题: 如果用户从自动完成列表中选择一个名称,则上述查询可以正常工作。然而,我想让用户写任何名字,即使他无法从自动完成列表中找到。例如,如果用户在文本框中输入tom,然后单击搜索按钮,我想显示所有演员的所有电影列表,这些演员的名字中包含单词tom

为此,我使用了LIKE:q和“:q'=>'%”$搜索文本。“%”在上面的查询中,但是查询永远不会结束!!我想因为cast_电影是一个相当大的视图,有300万行,把这个视图和另一个表连接起来需要很长时间,实际上我等了10分钟,但还没有完成

有人能告诉我是否有办法解决这个问题吗?我读到我们可以使用索引连接非常大的表,但我认为不可能为cast_movie定义索引,因为它是VIEW

更新: 关于评论,为了提供更多信息:

cast_movie是通过加入电影角色扮演和电影制作的视图

movie_roleNames也是一个视图,通过连接两个表Cast和nameRoles来创建

film_info也是一个视图,通过连接两个表movies和movies_info创建

上述表格的结构如下:

表movies:Id,movieName,ImdbId电影的唯一Id,速率,numVotes,年份索引:ImdbId,movieName,year

表cast:castName,castImdbID强制转换索引的唯一Id:castName,castImdbID

表名角色:Id,castImdbId,movieImdbId,role\u Id,索引:movieImdbId,castImdbId

VIEW movie_roleNames:Id、castName、castImdbId、movieImdbId,连接语句是:SELECT n.Id、c.castName、n.castImdbId、n.movieImdbId 将角色命名为n 以c的形式连接Cast 在n.castImdbId=c.castImdbId上

VIEW cast_movie:Id、castName、castImdbId、movieImdbId、movieName,连接语句是:选择m.Id、r.castName、r.castImdbId、r.movieImdbId、m.movieName 从电影_roleNames作为r 以m的身份加入电影 在r.movieImdbId=m.ImdbId上


非常感谢所有想法,

您是否尝试过选择不同的c.movieName、c.castName、c.ImdbId、f.year、,f.posterLink FROM cast_movie as c LEFT JOIN film_info as f ON c.ImdbId=f.ImdbId,其中c.castName类似“%”:q.“%”组BYc.moviename请发布CREATE VIEW语句以及有关表上所有索引定义的信息。请提供解释的选项输出。。。班尼:你能看看我的最新情况吗?tnxi建议通过向查询添加限制来使用分页。因为用户不会同时看到所有数据。@YohanesKhosiawan许先汉: 我使用分页!但是这个查询是在…斯普瑞之前执行的,也许我没有理解你的意思