Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从多个表检索记录的最快方法_Mysql_Performance_Inner Join - Fatal编程技术网

Mysql 从多个表检索记录的最快方法

Mysql 从多个表检索记录的最快方法,mysql,performance,inner-join,Mysql,Performance,Inner Join,我需要从两个表中检索列,并且使用了内部联接。但是在加载页面的过程中会花费很多时间。有没有更好更快的方法实现同样的目标 从Pyalers中选择p.Col1、p.Col2、p.Col3、p.Col4、p.Col5、C.Col1、C.Col2、C.Col3,p.Col1=p.Col1上的p内部连接客户C,其中p.Col2=5 提前谢谢。如果不知道您的DDL,就无法说 但从概念上来说,这是可以的,只要确保您有适当的索引集 例如:(您的表名真的是‘Pyalers’吗?假设是‘players’) 使用连接这

我需要从两个表中检索列,并且使用了内部联接。但是在加载页面的过程中会花费很多时间。有没有更好更快的方法实现同样的目标

从Pyalers中选择p.Col1、p.Col2、p.Col3、p.Col4、p.Col5、C.Col1、C.Col2、C.Col3,p.Col1=p.Col1上的p内部连接客户C,其中p.Col2=5


提前谢谢。

如果不知道您的DDL,就无法说

但从概念上来说,这是可以的,只要确保您有适当的索引集

例如:(您的表名真的是‘Pyalers’吗?假设是‘players’)

使用连接这两个表所需的列


您这样做是正确的,但是如果您的表上没有正确列上的索引,那么对于任何大小的表来说都不会很快。Pyalers.col1和Customers.col1都有索引吗


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

确保您的表具有所需的索引。。。作为“拇指规则”,用于搜索(
其中
)或数据联接(
内部联接
左联接
右联接
)的每个字段都应编制索引

示例:如果您正在创建一个表,则可以在此时添加索引(请注意,您的表应该始终具有主键):

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

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

  • 要定义索引,您必须为其提供唯一的名称,并指定索引中包含的字段:
    index myIndex(field1,field2,…)

  • 有不同类型的索引:
    主键
    用于主键(很明显,是吧?)<代码>索引是一种“普通索引”,仅用于加速搜索和连接操作<代码>唯一索引是防止重复值的索引

  • 建议:

    • 尽可能为所有相关的数字和日期字段(ID、出生日期等)编制索引。避免在包含“double”值的字段上创建索引

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

    小贴士:

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

      ALTER TABLE myTable
      ADD INDEX someIdx(someField),
      ADD PRIMARY KEY (myId);
      
      解释选择a,b。从a.myId=b.otherId上的内部联接b

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


    希望这对你有所帮助

    对不起,我这辈子都没用过索引。天哪,没想到。一个快速链接,这样我就可以处理相同的..?您在播放器上添加了索引,但是添加了两次:-)您必须添加相同的索引,但是也要添加到customers表上(在用于连接的customers列上)。您还需要
    删除播放器上的index PlayerId_2
    ,这是多余的,可能会增加开销。耶,现在明白了。我修正了玩家的索引,并在客户中添加了索引。但是我用于联接的Customer表中的列不是主键,也可能不是唯一的。这会有问题吗?一点也不,你不必创建唯一的索引,一个普通的索引(就像我在上面的查询中提到的那样)就足够了。谢谢。这很有帮助,而且很快。我希望这能解决问题。再次感谢,太棒了。。这是非常有用的一个。我喜欢。
    ALTER TABLE myTable
    ADD INDEX someIdx(someField),
    ADD PRIMARY KEY (myId);