Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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 DBMS)_Mysql_Sql - Fatal编程技术网

如何查询和显示索引表的行(MySql DBMS)

如何查询和显示索引表的行(MySql DBMS),mysql,sql,Mysql,Sql,我对SQL世界很陌生,我已经搜索了很多关于索引的博客 我有两个问题: 1-如何直接从索引表中查询并选择和显示其内容? 例如,假设表A有两个索引名A_index_1和A_index_2。我想这样做:select*from A.A_index_2,显示它的内容并用它进行实验 第二个问题更复杂。根据这个 行在多列索引中排序,它声明最左边列的下一列也已排序。现在假设此索引包含以下列: IDX1 on Table A : Country | Province | City | Street | Shop

我对SQL世界很陌生,我已经搜索了很多关于索引的博客

我有两个问题:

1-如何直接从索引表中查询并选择和显示其内容? 例如,假设表A有两个索引名A_index_1和A_index_2。我想这样做:
select*from A.A_index_2
,显示它的内容并用它进行实验

第二个问题更复杂。根据这个 行在多列索引中排序,它声明最左边列的下一列也已排序。现在假设此索引包含以下列:

IDX1 on Table A  : Country | Province | City | Street | Shop
假设有成吨的行共享同一个国家、省和市。现在,如果我们查询:
从where Country='c'订单中按省份选择*
,根据链接,因为该省在索引中与国家相邻,所以它也被排序,并且该查询的排序部分将被忽略(无操作)。现在假设我们要查询这个:
从where Country='c'和Province='p'按城市排序中选择*

问题是:

在同一省份的行中,索引中的城市列是否也已排序? 因此,排序部分会因此而被忽略吗


这个问题意味着索引中的其他列在其以前的列中具有相同的数据

根据我在使用Oracle DB时收集到的知识,我可以说:

没有什么比查询“from”索引更好的了。您可以查询“on”索引

假设您有一张桌子:

Col1 VARCHAR2(10)
Col2数
Col3日期

该表在
Col3
上建立索引。在这种情况下,如果您想使用索引,您的查询应该有一个
where
子句,它过滤
Col3

因此,基本上,如果在查询的
where
子句中使用索引中的
所有列,则索引有助于在筛选结果时加快查询速度

所以下面的查询使用索引:

从myTab中选择*,其中TRUNC(SYSDATE-1)和TRUNC(SYSDATE)之间的Col3

而以下查询不适用:

从myTab中选择*,其中Col1='Hello!'

我想补充一点,只有当您知道要做什么时,索引才是一个好主意。索引过多也是一种糟糕的做法。一个好主意是将索引放在过滤查询中“常用”的列上(
WHERE
查询子句)

您在问题中发布的内容类似于
分区
。这是表中的逻辑空间。因此,如果要查询某些特定的数据集,可以执行以下操作:


从myTab分区(myPart)中选择*

根据我在使用Oracle DB时收集的所有知识,我可以说:

没有什么比查询“from”索引更好的了。您可以查询“on”索引

假设您有一张桌子:

Col1 VARCHAR2(10)
Col2数
Col3日期

该表在
Col3
上建立索引。在这种情况下,如果您想使用索引,您的查询应该有一个
where
子句,它过滤
Col3

因此,基本上,如果在查询的
where
子句中使用索引中的
所有列,则索引有助于在筛选结果时加快查询速度

所以下面的查询使用索引:

从myTab中选择*,其中TRUNC(SYSDATE-1)和TRUNC(SYSDATE)之间的Col3

而以下查询不适用:

从myTab中选择*,其中Col1='Hello!'

我想补充一点,只有当您知道要做什么时,索引才是一个好主意。索引过多也是一种糟糕的做法。一个好主意是将索引放在过滤查询中“常用”的列上(
WHERE
查询子句)

您在问题中发布的内容类似于
分区
。这是表中的逻辑空间。因此,如果要查询某些特定的数据集,可以执行以下操作:

从myTab分区(myPart)中选择*

我自己找到的

1-根据这一点,您可以可视化索引表并按如下方式进行查询:

可视化索引有助于理解索引支持的查询。您可以查询数据库以按索引顺序检索条目

SELECT 'INDEX COLUMNS LIST'
  FROM 'TABLE'  
 ORDER BY 'INDEX COLUMNS LIST'
如果将索引定义和表名放入查询中,将从索引中获得一个示例

2-根据多列索引表中的链接,从最左边的列开始,对表进行排序。在最左边的列中共享相同值的行将根据从左边开始的第二列进行排序,同样,在第一列和第二列中共享相同值的行将根据从左边开始的第三列进行排序,依此类推

我自己发现的

1-根据这一点,您可以可视化索引表并按如下方式进行查询:

可视化索引有助于理解索引支持的查询。您可以查询数据库以按索引顺序检索条目

SELECT 'INDEX COLUMNS LIST'
  FROM 'TABLE'  
 ORDER BY 'INDEX COLUMNS LIST'
如果将索引定义和表名放入查询中,将从索引中获得一个示例


2-根据多列索引表中的链接,从最左边的列开始,对表进行排序。在最左边的列中共享相同值的行将根据从左边开始的第二列进行排序,同样,在第一列和第二列中共享相同值的行将根据从左边开始的第三列进行排序,依此类推

索引不是SQL中的第一类对象,因此您不能随心所欲。另外,你的问题太宽泛了。索引不是SQL中的第一类对象,所以你不能随心所欲。另外,你的问题太宽泛了