① oracle中對大數據處理有哪些方式
一、大數據存儲方式:
1. BLOB,二進制大數據
2. CLOB,文本類型大數據
3. BFILE(推薦),文件方式大內數據,以連接(容文件位置)方式存儲,實際在資料庫外
4. RAW,二進制大數據(ORACLE老版本的,9i後逐漸被BLOB/CLOB/BFILE代替)
二、大數據的處理內置函數
1. BLOB/CLOB/BFILE:DBMS_LOB包
2. RAW:UTL_RAW包
② oracle大數據查詢問題
|select
listagg(a_code,',')within group(order by a_code) ser_num,
case when max(a_code)=min(a_code) then '('||屬max(a_code)||')' else
'('||min(a_code)||','||max(a_code)||')' end
(
select
a_code,
a_code-rownum rn
from
a
)
group by rn;
③ 大數據量的情況下oracle是否比mysql具有優勢
1. Oracle是大型資料庫而Mysql是中小型資料庫,Oracle市場佔有率達40%,Mysql只有20%左右,同時Mysql是開源的而Oracle價格非常高。
2. Oracle支持大並發,大訪問量,是OLTP最好的工具。
3. 安裝所用的空間差別也是很大的,Mysql安裝完後才152M而Oracle有3G左右,且使用的時候Oracle佔用特別大的內存空間和其他機器性能。
4.Oracle也Mysql操作上的一些區別
①主鍵
Mysql一般使用自動增長類型,在創建表時只要指定表的主鍵為auto increment,插入記錄時,不需要再指定該記錄的主鍵值,Mysql將自動增長;Oracle沒有自動增長類型,主鍵一般使用的序列,插入記錄時將序列號的下一個值付給該欄位即可;只是ORM框架是只要是native主鍵生成策略即可。
②單引號的處理
MYSQL里可以用雙引號包起字元串,ORACLE里只可以用單引號包起字元串。在插入和修改字元串前必須做單引號的替換:把所有出現的一個單引號替換成兩個單引號。
③翻頁的SQL語句的處理
MYSQL處理翻頁的SQL語句比較簡單,用LIMIT 開始位置, 記錄個數;ORACLE處理翻頁的SQL語句就比較繁瑣了。每個結果集只有一個ROWNUM欄位標明它的位置, 並且只能用ROWNUM<100, 不能用ROWNUM>80
④ 長字元串的處理
長字元串的處理ORACLE也有它特殊的地方。INSERT和UPDATE時最大可操作的字元串長度小於等於4000個單位元組, 如果要插入更長的字元串, 請考慮欄位用CLOB類型,方法借用ORACLE里自帶的DBMS_LOB程序包。插入修改記錄前一定要做進行非空和長度判斷,不能為空的欄位值和超出長度欄位值都應該提出警告,返回上次操作。
⑤空字元的處理
MYSQL的非空欄位也有空的內容,ORACLE里定義了非空欄位就不容許有空的內容。按MYSQL的NOT NULL來定義ORACLE表結構, 導數據的時候會產生錯誤。因此導數據時要對空字元進行判斷,如果為NULL或空字元,需要把它改成一個空格的字元串。
⑥字元串的模糊比較
MYSQL里用 欄位名 like '%字元串%',ORACLE里也可以用 欄位名 like '%字元串%' 但這種方法不能使用索引, 速度不快。
⑦Oracle實現了ANSII SQL中大部分功能,如,事務的隔離級別、傳播特性等而Mysql在這方面還是比較的弱
④ oracle如何提高大數據group by 的效率
設一些參數 或者 調整執行計劃,見下面的語句:
-- Script Tested above 10g
-- Create a new temporary segment tablespace specifically for creating the index.
-- CREATE TEMPORARY TABLESPACE tempindex tempfile 'filename' SIZE 20G ;
-- ALTER USER username TEMPORARY TABLESPACE tempindex;
REM PARALLEL_EXECUTION_MESSAGE_SIZE can be increased to improve throughput.
REM but need restart instance,and should be same in RAC environment
REM this doesn't make sense,unless high parallel degree
-- alter system set parallel_execution_message_size=65535 scope=spfile;
alter session set workarea_size_policy=MANUAL;
alter session set workarea_size_policy=MANUAL;
alter session set db_file_multiblock_read_count=512;
alter session set db_file_multiblock_read_count=512;
--In conclusion, in order to have the least amount of direct operations and
--have the maximum possible read/write batches these are the parameters to set:
alter session set events '10351 trace name context forever, level 128';
REM set sort_area_size to 700M or 1.6 * table_size
REM 10g bug need to set sort_area_size twice
REM remember large sort area size doesn't mean better performance
REM sometimes you should rece below setting,and then sort may benefit from disk sort
REM and attention to avoid PGA swap
alter session set sort_area_size=734003200;
alter session set sort_area_size=734003200;
REM set sort area first,and then set SMRC for parallel slave
REM Setting this parameter can activate our previous setting of sort_area_size
REM and we can have large sort multiblock read counts.
alter session set "_sort_multiblock_read_count"=128;
alter session set "_sort_multiblock_read_count"=128;
alter session enable parallel ddl;
⑤ Oracle的極大數據量的分頁查詢問題
1.把星都換成需要的欄位名試一下。
2.索引順序排列正確(這個你查一下,索內引不是建 了就可以。查詢容時有順序的,四年前的項目,改變順序後,時間由35s 提升到6-8s,具體的記不清了,只記得有這么回事。)
回去以後試一下你的SQL,只有數據多才出現這個問題嗎?欄位長度大約都多少?