Ⅰ 如何修改sybase 資料庫的頁面大小
Sybase的page size是在創建服務名時指定的,服務創建後,該服務下麵包含的所有資料庫的page size就固定了,沒法修改,只有重建服務重新指定.
如果是windows平台,在使用sybase\ASE-12_5\bin\syconfig.exe創建服務時可以指定頁面大小,如果是unix或linux平台,則在rs資源文件中指定頁面大小.
Ⅱ (問題解決再追加100分)sql server存儲過程實現查詢數據條數過大,分頁查詢怎麼實現
按說5-8w這樣數量級的數據沒有問題,寫入Excel是布比較耗性能,主要還是要通過優化寫入Excel的代碼效率上去考慮。你可以考慮利用分批查詢寫入的方式來避免一次寫太多的數據到Excel:將你的查詢結果分段,比方你的語句中能不能用時間來認為分段,每次返回部分結果。
回到你的問題,對大數據量查詢的解決方案有以下兩種:
(1)、將全部數據先查詢到內存中,然後在內存中進行分頁,這種方式對內存佔用較大,必須限制一次查詢的數據量。
(2)、採用存儲過程在資料庫中進行分頁,這種方式對資料庫的依賴較大,不同的資料庫實現機制不通,並且查詢效率不夠理想。以上兩種方式對用戶來說都不夠友好。
2.解決思路
通過在待查詢的資料庫表上增加一個用於查詢的自增長欄位,然後採用該欄位進行分頁查詢,可以很好地解決這個問題。下面舉例說明這種分頁查詢方案。
(1)、在待查詢的表格上增加一個long型的自增長列,取名為「queryId」,mssql、sybase直接支持自增長欄位,oracle可以用sequence和trigger來實現。然後在該列上加上一個索引。
添加queryId列的語句如下:
Mssql: [QUERYID] [bigint] IDENTITY (1, 1)
Sybase: QUERYID numeric(19) identity
Oracle:
CREATE SEQUENCE queryId_S
INCREMENT BY 1
START WITH 1
MAXVALUE 999999999999999 MINVALUE 1
CYCLE
CACHE 20
ORDER;
CREATE OR REPLACE TRIGGER queryId_T BEFORE INSERT
ON "test_table"
FOR EACH ROW
BEGIN
select queryId_S.nextval into :new.queryId from al;
END;
(2)、在查詢第一頁時,先按照大小順序的倒序查出所有的queryId,
語句如下:select queryId from test_table where + 查詢條件 +order by queryId desc 。
因為只是查詢queryId欄位,即使表格中的數據量很大,該查詢也會很快得到結果。然後將得到的queryId保存在應用伺服器的一個數組中。
(3)、用戶在客戶端進行翻頁操作時,客戶端將待查詢的頁號作為參數傳遞給應用伺服器,伺服器通過頁號和queyId數組算出待查詢的queyId最大和最小值,然後進行查詢。
算出queyId最大和最小值的演算法如下,其中page為待查詢的頁號,pageSize為每頁的大小,queryIds為第二步生成的queryId數組:
int startRow = (page - 1) * pageSize
int endRow = page * pageSize - 1;
if (endRow >=queryIds.length)
{
endRow = this.queryIds.length - 1;
}
long startId =queryIds[startRow];
long endId =queryIds[endRow];
查詢語句如下:
String sql = "select * from test_table" + 查詢條件 + "(queryId <= " + startId + " and queryId >= " + endId + ")";
3.效果評價
該分頁查詢方法對所有資料庫都適用,對應用伺服器、資料庫伺服器、查詢客戶端的cpu和內存佔用都較低,查詢速度較快,是一個較為理想的分頁查詢實現方案。經過測試,查詢4百萬條數據,可以在3分鍾內顯示出首頁數據,以後每一次翻頁操作基本在2秒以內。內存和cpu佔用無明顯增長。
以上也僅僅是分頁查詢結果查看的問題,你需要寫入到Excel的話還需要考慮Excel寫入代碼的執行效率,這部分是很值得研究的。
Ⅲ DB2分頁查詢改成sybase的,求高手!在線等!!!高分回報,答案正確有追加分,謝謝!!!
sybase沒有rownumber() 這樣的排名函數呀?表有自增id嗎
Ⅳ sybase 分頁--在線等
沒有簡單的辦法。
要不你的程序中專門設計一個函數,用於跳過結果集,來模擬資料庫的top 和 rownum功能。
Ⅳ sybase怎樣實現分頁查詢
ect[] argus =
{
Integer.toString(recNum),
Integer.toString(recNum * (pageNum - 1)),
table,
cond1,
cond2,
field };
StringBuffer sqlstr = new StringBuffer("set rowcount {1}\n");
sqlstr.append(
"select id into #tmptable from {2} {4} order by id desc\n");
sqlstr.append("set rowcount {0}\n");
sqlstr.append(
"select {5} from {2} where id<(select min(id) from #tmptable) {3} order by id desc\n");
sqlstr.append("drop table #tmptable");
Ⅵ 每翻一頁,都去資料庫中查一次。這種分頁效果用java怎麼寫
在用jdbc訪問某個資料庫,並讀出一個resultset數據記錄集時,如果記錄數太大,則會佔用客戶端(運行java程式的機器)的大量內存(如果客戶端是某個大企業的營業部門的代理點分機,則有可能java程式會佔用完全部內存,然後報錯),並且會造成客戶端負載過重,運行速度極度緩慢(在sybase資料庫中,我曾做過一個測試。選擇某個大數據記錄,sql語句運行完需要4分鍾,而在java客戶端完全顯示出來,則需要將近10分鍾)。解決方案:
給用戶提供一個可選擇分頁顯示的選項,如果用戶不想分頁顯示則完全顯示,否則分頁顯示。
1.定義一個分頁數全局常量,即每頁顯示的數據條數。
private final static int skip = 100;
2.定義一個確定某個分頁條數的全局變數,即該顯示頁的當前顯示數據條數。
private static int cur = 0;
3.定義一個resultset全局變數,以便多次使用
private static java.sql.result rs = null;
4.打開一個資料庫連接[/pre]
class.forname( sqldriver );java.sql.connection conn = drivermanager.getconnection( url, (string)username,(string)passwd)statement stmt = conn.createstatement();string searchsql = "......";rs = stmt.executequery(searchsql);
Ⅶ sybase資料庫是否支持查詢分頁
sybase不支持分頁查詢。要想分頁查詢需自己寫存儲過程
Ⅷ Sybase資料庫怎麼分頁,要寫存儲過程嗎
Sybase資料庫中的高效分頁方法
Sybase使用rank() over(order by id)ret的方式分頁,這種方式在數據量達到40W條的時候很耗時,大概5S的時間,當達到千萬條的時候,查詢一次大概是1分40秒
對於這種方式,瓶頸可能是出在排序部分,當排序的唯一欄位是varchar類型的時候更加明顯
現在有種新的方式,就是利用rowid。
如:select a.* from table_name a where rowid(a) >=1 and rowid(a)<11
經測試,在同一張表中,1500W的數據量,每次查詢時間都在200ms以內
但是這個函數只能用在真實的數據表,無法在臨時表中用到;
這個rowid,是在數據插入的時候,資料庫給每行數據分配的物理唯一標識,如果要頁面中要用到動態排序,這個是不支持的。
Ⅸ sybase powerbuilder 10.5里數據窗口裡的數據怎麼分頁顯示
分頁顯示是什麼意思呢?是分欄顯示吧?
如果是的話,在窗口open()事件里寫:
dw_1.HSplitScroll = true //--數據窗口左右分欄
dw_1.Object.DataWindow.HorizontalScrollSplit = dw_1.object.列名.x //--設置分欄的分隔線位置
Ⅹ 如何修改sybase 資料庫的頁面大小
Sybase公司是世界著名的資料庫廠家,其關系資料庫產品SYBASE SQL Server在中國大中型企事業單位中擁有大量的用戶。針對獲取資料庫相關信息也提供了對應的API,以便管理進行維護。
一.sp_spaceused 可看到資料庫空間包括日誌(對應資料庫)
打開Sql Advantage 對話框——輸入sp_spaceused(上邊資料庫選擇要查的資料庫)或直接
use your_db_name
go
sp_spaceused
go
運行!出現如下信息
Database name:資料庫名稱
Datebase Size:資料庫空間總大小
Reserved:已分配空間
data數據:已分配空間中數據佔用空間大小
index_size索引:已分配空間中index_size索引佔用空間大小
unused:為已分配空間中未使用空間大小
計算關系:
reserved(已分配空間)=data+index_size+unused
剩餘空間= Datebase Size(總空間)—已分配空間(resrved)
二.sp_helpdb db_name 可看到資料庫佔用的資料庫設備device的空間信息(對應資料庫設備和資料庫)
打開Sql Advantage 對話框——輸入sp_s helpdb db local(local為要看的資料庫名字如不輸入則顯示所有資料庫)
運行!顯示如下信息:
(一).資料庫方面
1. name:資料庫名字
2. db_size:資料庫空間大小
3. owner:資料庫所有者
4. created:資料庫創建時間
5. status:狀態
(二).資料庫設備方面
1. device_fragments:資料庫設備名稱
2. size:資料庫佔用資料庫設備的空間大小 單位MB
3. usage:用法 用途
4. created:資料庫佔用的資料庫設備的空間的創建時間
5. free kbytes :資料庫佔用的資料庫設備的剩餘空間 單位KB
6. log only free
kbytes:資料庫日誌設備中日誌剩餘空間 單位KB
注意:由於資料庫創建後不一定全部佔用資料庫設備的所有空間,可以在以後通過增加的方法佔用設備空間,因此每增加一次就會有一條資料庫設備信息
計算關系:
剩餘空間=所有free Kbytes(剩餘KB)相加+log only
free Kbytes
資料庫佔用資料庫設備總空間(size)=size1+size2+……..(所有相加)=資料庫總空間(db_size)=
reserved(已分配空間)+剩餘空間
free Kbytes(剩餘KB)相加+log only free Kbytes= Datebase
Size(總空間)—已分配空間(resrved)