Ⅰ oracle中分區查詢時,怎樣一次查詢多個分區
舉個例子來說吧:
create table tableA ( STATIS_DAY VARCHAR2(8))
partition by list (STATIS_DAY)
(
partition PART_20110522 values ('20110522');
partition PART_20110522 values ('20110523');
partition PART_20110522 values ('20110524')
);
那麼 你在寫sql的時候
直接 select * from tableA where STATIS_DAY between '20110524' and '20110523' 就是查詢多個分區了啊!
首先你要理解分區的意義;
select *from tableA partition(PART_20110522 ); 就是單獨查詢這個分區。不過其實跟
select * from tableA where STATIS_DAY ='20110522' 是一個樣子的~~~
分區表的相關資料:http://blog.csdn.net/xieyuooo/article/details/5437126
Ⅱ 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年的分區。
對於未分區的表
前面已說明,具體查詢策略取決於索引類型。
Ⅲ 如何對一個已經存在的SQL Server表分區
有兩種方法可以實現對一個表分區.一是創建一個新的標識為分區表的表(你可參照此步驟),然後把數據復制到這張新表,再對這兩張表分別改名.或者,像我寫在下面的,通過重建或創建一個聚集索引來達到分區一個表.
一個SQL Server表和數據進行分區示例
--Table/Index creation
CREATE TABLE [dbo].[TABLE1]
([pkcol] [int] NOT NULL,
[datacol1] [int] NULL,
[datacol2] [int] NULL,
[datacol3] [varchar](50) NULL,
[partitioncol] datetime)
GO
ALTER TABLE dbo.TABLE1 ADD CONSTRAINT PK_TABLE1 PRIMARY KEY CLUSTERED (pkcol)
GO
CREATE NONCLUSTERED INDEX IX_TABLE1_col2col3 ON dbo.TABLE1 (datacol1,datacol2)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO
-- Populate table data
DECLARE @val INT
SELECT @val=1
WHILE @val < 1000
BEGIN
INSERT INTO dbo.Table1(pkcol, datacol1, datacol2, datacol3, partitioncol)
VALUES (@val,@val,@val,'TEST',getdate()-@val)
SELECT @val=@val+1
END
GO
通過查看sys.partitions系統視圖,上面的代碼創建了一個傳統的單分區表.
SELECT o.name objectname,i.name indexname, partition_id, partition_number, [rows]
FROM sys.partitions p
INNER JOIN sys.objects o ON o.object_id=p.object_id
INNER JOIN sys.indexes i ON i.object_id=p.object_id and p.index_id=i.index_id
WHERE o.name LIKE '%TABLE1%'
objectname
indexname
partition_id
partition_number
rows
TABLE1 PK_TABLE1 72057594042712064 1 999
TABLE1 IX_TABLE1_col2col3 72057594042777600 1 999
創建已分區的SQL Server表
為了創建一個分區表,需要先創建一個分區函數和分區方案. 下面的示例中,將通過datatime欄位對一個表分區. 這里是創建這些對象與在系統視圖中查看這些元數據的代碼.
CREATE PARTITION FUNCTION myDateRangePF (datetime)
AS RANGE RIGHT FOR VALUES ('20110101', '20120101','20130101')
GO
CREATE PARTITION SCHEME myPartitionScheme
AS PARTITION myDateRangePF ALL TO ([PRIMARY])
GO
SELECT ps.name,pf.name,boundary_id,value
FROM sys.partition_schemes ps
INNER JOIN sys.partition_functions pf ON pf.function_id=ps.function_id
INNER JOIN sys.partition_range_values prf ON pf.function_id=prf.function_id
現在我們有一個分區方案,可對表進行分區操作. 既然我們想通過聚集索引來對一個創建了聚集索引的表進行分區,我們需要先刪除掉這個索引並通過一個非聚集索引重建這個約束. 若這張表沒有聚集索引,我們可忽略這一步,直接執行創建聚集索引語句. 類似地,若有一個聚集索引創建在分區欄位上,我們可執行帶DROP_EXISTING的創建聚集索引語句. 最後,若關注於執行此任務時資料庫停止服務時間並且你使用的是SQL Server企業版本,可通過創建索引的ONLINE=ON選項來使資料庫的停止服務時間最小. 記住,在使用ONLINE選項重建索引時,你可能會看到一些性能降低的現象. 這里是一些可能會乃至的腳本.
ALTER TABLE dbo.TABLE1 DROP CONSTRAINT PK_TABLE1
GO
ALTER TABLE dbo.TABLE1 ADD CONSTRAINT PK_TABLE1 PRIMARY KEY NONCLUSTERED (pkcol)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
CREATE CLUSTERED INDEX IX_TABLE1_partitioncol ON dbo.TABLE1 (partitioncol)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON myPartitionScheme(partitioncol)
GO
在這些語句結束後,我們可再次查看sys.partitions系統視圖(看上面的代碼)並確認我們的表有4個分區.
objectname
indexname
partition_id
partition_number
rows
TABLE1 IX_TABLE1_partitioncol 72057594043039744 1 233
TABLE1 IX_TABLE1_partitioncol 72057594043105280 2 365
TABLE1 IX_TABLE1_partitioncol 72057594043170816 3 366
TABLE1 IX_TABLE1_partitioncol 72057594043236352 4 35
TABLE1 IX_TABLE1_col2col3 72057594043301888 1 999
TABLE1 PK_TABLE1 72057594043367424 1 999
SQL Server表和數據示例清除
--cleanup
DROP TABLE TABLE1
DROP PARTITION SCHEME myPartitionScheme
DROP PARTITION FUNCTION myDateRangePF
Ⅳ 在my sql中怎麼將數據表分區
可以看mysql的data文件夾下面的資料庫文件,就可以查看當前分區情況。
還有幾種獲取MySQL分區表信息的常用方法
SHOW CREATE TABLE
可以查看創建分區表的CREATE語句
SHOW TABLE STATUS
可以查看錶是否為分區表
查看INFORMATION_SCHEMA.PARTITIONS表
可以查看錶具有哪幾個分區、分區的方法、分區中數據的記錄數等重要信息
Ⅳ 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;
Ⅵ 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;
Ⅶ mysql分區數據如何查看
select * from 表 partition (分區表名); -->不管是1級分區還是2級分區都是用partition
select partition_name , subpartition_name from information_schema.partitions where table_schema='你的資料庫名' and table_name='你的表名'; (這個語句可以查到你的表的分區名是什麼,1級分區和2級分區都可以看)
Ⅷ sql查詢是否已分區有
查看錶分區,以前在企業版資料庫切換到標准版時,使用過
企業版標准版資料庫切換
請查看這篇文章中,查看資料庫是否存在分區表的方法
如有疑問,及時溝通
請採納!