SELECT *
FROM restaurant_rate
WHERE
table_id IN (SELECT id_table FROM rTable WHERE restaurant_id = ?)
LIMIT 0, 10;
内部选择的结果数不是静态的。在这种情况下,mysql只扫描10行逐个搜索?或扫描整个表并返回前10行? id_table是rTable的索引列。
答案 0 :(得分:0)
编写查询的方式非常不合适,因为它会强制评估表中每行的in
子句。如果rTable
中有许多符合条件的记录(让我们说1000),则restaurant_rate
中的每一行都需要与1000个值进行比较才能被{{接受或拒绝1}}条件。
我会像这样重写你的查询:
where
你必须考虑的事情:
select rr.*
from
restaurant_rate as rr
inner join rTAble as r on rr.table_id = r.id_table
where
r.restaurant_id = ?
limit 0, 10;
和join
条件中涉及的列。where
的{{1}}没有多大意义;在limit
之前添加order by
子句。