加入两个Mysql VIEW需要很长时间

时间:2014-11-20 19:33:47

标签: 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.ImdbId = f.ImdbId WHERE c.castName = :q");
 $query->execute(array(':q' => $searchText ));

我的问题:

如果用户从自动完成列表中选择一个名称,则上述查询可以正常工作。但是我想让用户写任何名字(即使他无法从自动完成列表中找到)。例如,如果用户写" tom"在文本框中,单击"搜索"按钮,我想显示所有演员的所有电影列表,他们的名字包含单词" tom"。

为此,我在上面的查询中使用了LIKE :q':q' => '%' . $searchText . '%',但查询永远不会结束!!(我认为因为cast_movie是一个相当大的VIEW(带有300万行)并将此视图与另一个表连接需要很长时间(实际上我等了10分钟它还没有完成)。

有人可以告诉我是否有办法解决这个问题? (我读过我们可以使用索引来加入非常大的表,但我认为不可能为cast_movie定义索引,因为它是VIEW。)

UPDATE:

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

cast_movie是一个通过加入" movie_roleNames"和#34;电影"。

movie_roleNames也是一个通过连接两个表格而制作的视图" Cast"和" nameRoles"。

film_info也是一个通过加入两个表"电影"和" movies_info"。

上表的结构:

&#34;电影&#34; Id,movieName,ImdbId(电影的唯一ID),费率,numVotes,年索引< / strong>: ImdbId,movieName,year

&#34;演员&#34; castName,castImdbID(演员阵容的唯一ID)索引 castName ,castImdbID

&#34; nameRoles&#34; Id,castImdbId,movieImdbId,role_Id ,(索引 movieImdbId, castImdbId

查看&#34; movie_roleNames&#34; Id,castName,castImdbId,movieImdbId ,加入声明为:SELECT n.Id, c.castName, n.castImdbId, n.movieImdbId FROM nameRoles as n join Cast as c ON n.castImdbId = c.castImdbID

查看&#34; cast_movie&#34; Id,castName,castImdbId,movieImdbId,movieName ,加入声明为:SELECT m.Id, r.castName, r.castImdbId, r.movieImdbId, m.movieName FROM movie_roleNames AS r JOIN movies AS m ON r.movieImdbId = m.ImdbId

所有想法都受到高度赞赏,

0 个答案:

没有答案