Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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:哪些查询可以解除哪些索引的锁定?_Sql_Mysql_Optimization_Indexing - Fatal编程技术网

mysql:哪些查询可以解除哪些索引的锁定?

mysql:哪些查询可以解除哪些索引的锁定?,sql,mysql,optimization,indexing,Sql,Mysql,Optimization,Indexing,我使用的是Mysql 5.0,对索引有点陌生。以下哪些查询可以通过索引得到帮助,我应该创建哪些索引 (不要假设任何一个表都有唯一的值。这不是家庭作业,这只是我编的一些示例,目的是为了让我的注意力集中在索引上。) 以下是我对这些不同类型查询将使用哪些索引的猜测: Query1: Create Index Query1 Using Hash on b (type); Query2: Create Index Query2a Using Hash on a (type); Create Index

我使用的是Mysql 5.0,对索引有点陌生。以下哪些查询可以通过索引得到帮助,我应该创建哪些索引

(不要假设任何一个表都有唯一的值。这不是家庭作业,这只是我编的一些示例,目的是为了让我的注意力集中在索引上。)

以下是我对这些不同类型查询将使用哪些索引的猜测:

Query1:
Create Index Query1 Using Hash on b (type);

Query2:
Create Index Query2a Using Hash on a (type);
Create Index Query2b Using Hash on b (type);

Query3:
Create Index Query2a Using Hash on b (brand,type);
Query1和Query3都不会使用表a上的任何索引,这对吗

我认为这些都应该是散列,因为只有=或!=,对吧?


谢谢

查询3无效,但我想你的意思是

其中a.键入….

查询1与查询2相同,只是语法更好,两者可能具有相同的查询计划,并且都将使用两个索引

查询3将使用b.brand上的索引,但不使用其类型部分。如果您有一个索引,它也会在.type上使用索引


你说得对,它们应该是散列索引。

查询3无效,但我想你的意思是

其中a.键入….

查询1与查询2相同,只是语法更好,两者可能具有相同的查询计划,并且都将使用两个索引

查询3将使用b.brand上的索引,但不使用其类型部分。如果您有一个索引,它也会在.type上使用索引

你说得对,它们应该是散列索引。

在mysql中使用该命令将提供大量有关mysql正在做什么以及如何优化查询的信息

在q1和q2中:一个索引位于(a.类型,所有其他a列)上,另一个索引位于(b.类型,所有其他b列) 第三季度:一个指数(a.b_型,所有其他a型)和一个指数(b型,品牌)

理想情况下,您希望所有选中的列都直接存储在索引中,这样mysql就不必从索引跳回表数据来获取选中的列。但是,这并不总是可管理的(即:有时需要选择*并且索引所有列的成本太高),在这种情况下,只索引搜索列就可以了

因此,您所说的一切都非常有效。

在mysql中使用该命令将提供大量有关mysql正在做什么以及如何优化查询的重要信息

在q1和q2中:一个索引位于(a.类型,所有其他a列)上,另一个索引位于(b.类型,所有其他b列) 第三季度:一个指数(a.b_型,所有其他a型)和一个指数(b型,品牌)

理想情况下,您希望所有选中的列都直接存储在索引中,这样mysql就不必从索引跳回表数据来获取选中的列。但是,这并不总是可管理的(即:有时需要选择*并且索引所有列的成本太高),在这种情况下,只索引搜索列就可以了


因此,您所说的一切都很有效。

如果brand=5的b的数量接近于零,则查询3可以利用a.type上的索引


Query2将利用索引,如果它们是B-树(因此被排序)。将散列索引与索引联接一起使用可能会降低查询速度(因为您必须以非顺序方式读取大小(a)值)

如果品牌=5的b的数量接近于零,则查询3可以使用a.type上的索引


Query2将利用索引,如果它们是B-树(因此被排序)。将哈希索引与索引联接一起使用可能会降低查询速度(因为您必须以非顺序方式读取大小(a)值)

查询优化和索引是一个庞大的主题,因此您肯定会想了解MySQL和您正在使用的特定存储引擎。InnoDB和NDB支持“使用哈希”;我不认为MyISAM支持它

即使联接条件相等,您拥有的联接也将执行完整表或索引扫描;因为没有where子句,所以必须读取每一行


使用标准的b树索引可能会更好,但请测量它并使用“explain”调查查询计划。MySQL InnoDB存储按主键组织的行数据,因此表上也应该有主键,而不仅仅是索引。最好是在联接中使用主键,否则MySQL会从索引中检索主键,然后再进行另一次提取以获取行。该规则的一个很好的例外是,如果辅助索引包含查询中所需的所有列。这就是所谓的覆盖索引,MySQL根本不需要查找该行。

查询优化和索引是一个庞大的主题,因此您肯定想了解MySQL和您正在使用的特定存储引擎。InnoDB和NDB支持“使用哈希”;我不认为MyISAM支持它

即使联接条件相等,您拥有的联接也将执行完整表或索引扫描;因为没有where子句,所以必须读取每一行


使用标准的b树索引可能会更好,但请测量它并使用“explain”调查查询计划。MySQL InnoDB存储按主键组织的行数据,因此表上也应该有主键,而不仅仅是索引。最好是在联接中使用主键,否则MySQL会从索引中检索主键,然后再进行另一次提取以获取行。该规则的一个很好的例外是,如果辅助索引包含查询中所需的所有列。这称为覆盖索引,MySQL根本不需要查找该行。

对不起?查询1是外部联接,它将输出来自“a”的所有值(而查询2不会)。抱歉?查询1是一个外部联接,它无论如何都会输出来自“a”的所有值(而查询2不会)哇。。。是的,mysql文档没有提到任何关于索引非连接列的内容。谢谢你的提示!更好的方法是尽可能地使用聚集索引,当然这并不总是可能的。是的,聚集索引很好。至少在mysql中,它只能位于唯一的列上。ms sql server具有更好的支持
Query1:
Create Index Query1 Using Hash on b (type);

Query2:
Create Index Query2a Using Hash on a (type);
Create Index Query2b Using Hash on b (type);

Query3:
Create Index Query2a Using Hash on b (brand,type);