0

我在尝试加入 3 个表时遇到问题,每次在我的服务器上运行查询时,我都会遇到需要手动终止的巨大停顿。

这是表格限制

books   : isbn(PK)
books_a : id(PK), isbn, price, condition
books_l : id(PK), isbn, price, condition

这是查询

SELECT 
   b.isbn, 
   a.price       AS a_price, 
   a.condition   AS a_condition, 
   l.price       AS l_price, 
   l.condition   AS l_condition 

FROM 
   books b  

   LEFT JOIN a_books a ON b.isbn  = a.isbn 
   LEFT JOIN l_books l ON b.isbn  = l.isbn

我的查询可能有什么问题?(注意我在每个表中确实有超过 6,000 条记录)

4

4 回答 4

3

我敢打赌,这些列中的一个或一些没有被索引。a_books.isbn, books.isbn,l_books.isbn

尝试运行此语句,

ALTER table a_books ADD INDEX IDX_abk (isbn);
ALTER table books ADD INDEX IDX_bk (isbn);
ALTER table l_books ADD INDEX IDX_lbk (isbn);

阅读这篇文章: 数据库索引是如何工作的?

于 2012-09-27T06:00:02.090 回答
1

问题可能是 isbn 没有索引。

于 2012-09-27T05:58:56.217 回答
1

显然,索引是表中记录 > 6K 的罪魁祸首。

于 2012-09-27T06:06:51.330 回答
1

另一个原因可能是在加入第一个表之后,第二个加入将是巨大的扫描。所以它会返回很多行。

于 2012-09-27T06:24:45.270 回答