sql分区表查询
① sql 大量数据分表查询
可以,这个就像你分页的时候,当一个表的数据量太大, 你就不可能一次性全查出来,得规定查出多少条,然后下一页的时候再是后面多少条,具体实现就自己写了。我这里给你个分页的SQL,oracle的分页。
SELECT * FROM (
SELECT a.*, ROWNUM rm FROM(
SELECT * FROM tableName
) a WHERE ROWNUM <=10
) WHERE rm>5
这里是查出6~10条数据,你可以按这个思路去做做。
② sql server 查看分区表的分区字段
如果表 PartitionTable
已分区,以下查询将返回一个或多个行。
如果表未分区,则不返回任何行。
SELECT * FROM sys.partitions AS p
JOIN sys.tables AS t
ON p.object_id = t.object_id
WHERE p.partition_id IS NOT NULL
AND t.name = 'PartitionTable';
以下查询返回表的分区列的名称。
PartitionTable.
SELECT t.object_id AS Object_ID, t.name AS TableName, ic.column_id as PartitioningColumnID, c.name AS PartitioningColumnName
FROM sys.tables AS t
JOIN sys.indexes AS i
ON t.object_id = i.object_id
JOIN sys.columns AS c
ON t.object_id = c.object_id
JOIN sys.partition_schemes AS ps
ON ps.data_space_id = i.data_space_id
JOIN sys.index_columns AS ic
ON ic.object_id = i.object_id AND ic.index_id = i.index_id AND ic.partition_ordinal > 0
WHERE t.name = 'PartitionTable'
AND i.type <= 1
AND c.column_id = 1;
③ sqlserver查看哪些表有分区
SQLSERVER中,有时需要知道已经建了哪些分区表,从哪里看?
1、直接用SQL语句查:
--分区数大于1的,就是我们想查看的分区表:
SELECT p.*,'|' AS SP ,t.* FROM sys.partitions AS p
inner JOIN sys.tables AS t ON p.object_id = t.object_id
inner join (
select object_id as object_id2,index_id, count(*) AS CNT FROM sys.partitions
group by object_id,index_id
having count(*)>1
) s on s.object_id2 = p.object_id
WHERE p.partition_id IS NOT NULL
order by t.name;
2、在管理器中查看:
Databases > [数据库名称] 节点 > 存储(Storage) 节点 >
\ 分区架构(Partition Schemes ) 节点 > 选中一项 > 右键 > 查看依赖
\ 分区函数(Partition Functions ) 节点 > 选中一项 > 右键 > 生成脚本
3、有作多分区的表,属性的 存储(Storage) 会有 Partitioning 信息。
④ oracle怎样查询哪些表分区
如果查询当前用户下得分区表:
select * from user_tables where partitioned='YES'
如果要查询整个数据库中的分区表:
select * from dba_tables where partitioned='YES'
如果要查询某个用户下得分区表:
select * from dba_tables where partitioned='YES' and owner='ABCDEFG'
其中ABCDEFG为用户名
⑤ SQL语句如何查询分区键
如果表 PartitionTable
已分区,以下查询将返回一个或多个行。
如果表未分区,则不返回任何行。
SELECT * FROM sys.partitions AS p
JOIN sys.tables AS t
ON p.object_id = t.object_id
WHERE p.partition_id IS NOT NULL
AND t.name = 'PartitionTable';
以下查询返回表的分区列的名称。
PartitionTable.
SELECT t.object_id AS Object_ID, t.name AS TableName, ic.column_id as PartitioningColumnID, c.name AS PartitioningColumnName
FROM sys.tables AS t
JOIN sys.indexes AS i
ON t.object_id = i.object_id
JOIN sys.columns AS c
ON t.object_id = c.object_id
JOIN sys.partition_schemes AS ps
ON ps.data_space_id = i.data_space_id
JOIN sys.index_columns AS ic
ON ic.object_id = i.object_id AND ic.index_id = i.index_id AND ic.partition_ordinal > 0
WHERE t.name = 'PartitionTable'
AND i.type <= 1
AND c.column_id = 1;
⑥ sql查询是否已分区有
查看表分区,以前在企业版数据库切换到标准版时,使用过
企业版标准版数据库切换
请查看这篇文章中,查看数据库是否存在分区表的方法
如有疑问,及时沟通
请采纳!
⑦ 如何准确获取分区表各分区的记录数
select min(主键)from table partition (分区名);
这个可以查询出指定分区是否有数据。
进一步,利用dba_tab_partitions视图,拼接出相应的各分区的查询语句。
select 'select '''||partition_name||''' partition_name,min(主键列) flag
from '||table_owner||'.'||table_name||' partition ('||partition_name||')
union all ' from dba_tab_partitions where table_name='XXX';
将最后一个语句的“UNION ALL" 取消,然后整体执行拼接出来的SQL,哪个分区为空,哪个分区就是没有数据。
注:如果有二级分区,就用 dba_tab_subpartitions视图来拼接。
⑧ mysql分区数据如何查看
select * from 表 partition (分区表名); -->不管是1级分区还是2级分区都是用partition
select partition_name , subpartition_name from information_schema.partitions where table_schema='你的数据库名' and table_name='你的表名'; (这个语句可以查到你的表的分区名是什么,1级分区和2级分区都可以看)
⑨ 将一个3000多万条记录的表转化为分区表后原客户查询SQL语句要改吗
不用把数据导出来,创建一个和原表结构相同的分区表,然后做分区交换,删除原表,最后把表名改为原来的就OK了
⑩ sql分区后如何提高查询效率
你可能没有理解分区的目的。
如果只是纯粹的为了 分区而分区。那就没什么意义了。
首先。看了一下你的分区方式,总体上是没太大问题的。
如果不分区
那么当执行
SELECT * FROM tbl1 WHERE tbl = '2009-12-31'
的时候。
数据库需要从一个很大的索引里面去检索数据 (包含08年--11年 600W行)
如果分区了。
那么当执行
SELECT * FROM tbl WHERE tbl = '2009-12-31'
的时候。
数据库仅仅需要从一个较小的索引里面去检索数据 (09年 100W行)
举个简单的例子来说,也就是:
如果不分区,好比大海捞针的话。
那么分区了,好比从某条河里面捞针。
注意:如果查询的条件,不包含分区条件。
就好比要从河里面捞针,但是具体哪条河不知道,要每一条河都去捞一遍
(这就是 “如果跨区反而更慢 ” )
=================
下面再来看看 你的查询两年的数据的 SQL。
select * from tbl where tm between '2009-01-01' and '2010-01-01'
select * from tbl1 where tm between '2009-01-01' and '2010-01-01'
你这2个SQL,基本上数据库在分析完毕以后,要看索引的类型。
理论上是不使用非聚集索引的。
如果有聚集索引,那么采用聚集索引,没有的话,就直接全表扫描的。
对于分区的表
数据库顶多可以分析到,本次检索,可以不去检索 08年的分区与 11年的分区。
但是要去全部检索 09年的分区 与 10年的分区。
对于未分区的表
前面已说明,具体查询策略取决于索引类型。