1

我需要从两个表中检索列,并且我使用了 INNER JOIN。但它在加载页面时会耗费大量时间。有没有更好更快的方法来实现同样的目标?

从 Pyalers P 中选择 P.Col1、P.Col2、P.Col3、P.Col4、P.Col5、C.Col1、C.Col2、C.Col3 在 C.Col1 = P.Col1 上连接客户 C,其中 P。 Col2 = 5

提前致谢。

4

3 回答 3

0

不知道你的 DDL,就没有办法说。

但从概念上讲这是可以的,只要确保你有正确的索引集。

例如:(您的表名真的是“Pyalers”吗?假设是“玩家”)

CREATE INDEX idx_players ON `players` (col1);
CREATE INDEX idx_customers ON `customers` (col1);

使用连接 2 个表所需的列。

http://dev.mysql.com/doc/refman/5.0/en/create-index.html

于 2012-06-01T18:14:53.333 回答
0

您正在以正确的方式进行操作,但是如果您的表上没有正确列上的索引,那么对于任何大小的表都不会很快。Pyalers.col1 和 Customers.col1 是否都有索引?

向我们展示这些表是如何定义的。

于 2012-06-01T18:18:04.667 回答
0

确保您的表具有所需的索引...作为“经验法则”,用于搜索 ( WHERE) 或数据连接 ( INNER JOIN, LEFT JOIN, RIGHT JOIN) 的每个字段都应该被索引。

示例:如果你正在创建一个表,你可以在那个时候添加你的索引(注意你的表应该总是有一个主键):

CREATE TABLE myTable (
myId int unsigned not null,
someField varchar(50),
primary key (myId),
index someIdx(someField)
);

如果你的表已经存在,并且要添加索引,则需要使用ALTER语句:

ALTER TABLE myTable
ADD INDEX someIdx(someField),
ADD PRIMARY KEY (myId);

规则:

  1. 要定义索引,您需要为其提供唯一名称,并指定索引中包含的字段:INDEX myIndex(field1, field2, ...)

  2. 有不同类型的索引:PRIMARY KEY用于主键(这很明显,是吧?);INDEX是一个“普通索引”,只是用来加速搜索和连接操作;UNIQUE INDEX是防止重复值的索引。

建议:

  • 只要有可能,索引所有相关的数字和日期字段(id、出生日期等)。避免在包含“双”值的字段上创建索引。

  • 不要滥用索引,因为滥用会创建非常大的索引文件。

尖端:

  • 如果您想查看查询将如何执行,可以使用以下EXPLAIN语句:

    解释选择 ,乙。从 a.myId = b.otherId 上的内部连接 ​​b

该指令将向您显示查询的执行计划。如果在最后一列中看到“文件排序”或“使用临时”,您可能(只是可能)需要额外的索引(请注意,如果您使用GROUP BY,您几乎总是会收到“使用临时”消息)

希望这对你有帮助

于 2012-06-01T19:05:54.253 回答