mysql 导入百万级数据 几种 java_Java 修行第034天--执行计划及其使用--Oracle数据导入导出--第三章MySQL使用...
執行計劃中牢記幾句話:
-- 盡量避免是*代替所有列,編寫查詢語句時使用具體列名代替*,可以防止全表掃描
-- 盡可能少的使用like關鍵字進行模糊查詢
-- 建立適當的索引可以提高查詢效率
十三. 執行計劃--通過PL/SQL Developer查看查詢的
1 執行計劃是一條查詢語句在Oracle中的執行過程或訪問路徑的描述.
2 配置執行計劃需要顯示的項
3 執行計劃的常用列字段解釋
基數(Cardinality):Oracle 估計的當前操作的返回結果集行數
字節(Bytes):執行該步驟后返回的字節數
耗費(COST)、CPU 耗費:Oracle 估計的該步驟的執行成本,用于說明 SQL 執行的代價,理論上越小越好(該值可能與實際有出入)
時間(Time):Oracle 估計的當前操作所需的時間
4 使用執行計劃
通過工具啟動執行計劃。選中需要查看執行計劃的查詢語句,在工具欄中選擇Tools--->Explain Plan或者是選擇需要查看執行計劃的查詢語句按 F5。
5 查看執行計劃
5.1執行順序
縮進最多的最先執行;(縮進相同時,最上面的最先執行)。
5.2表訪問的幾種常見方式(非全部):
(1) TABLE ACCESS FULL(全表掃描): --建議數據小的表使用
掃描所有表,并檢查每一行是否滿足where限制條件
(2) TABLE ACCESS BY INDEX ROWID(通過 ROWID 的表存取)
(****注意:rowid在這里也是偽列(和rownum一樣) ,是由 Oracle 自動加在表中每行最后的一列偽列,是在該行生命周期內不會發生改變的列.)
行的 ROWID 指出了該行所在的數據文件、數據塊以及行在該塊中的位置,所以通過ROWID 可以快速定位到目標數據上,這也是 Oracle 中存取單行數據最快的方法
(3) TABLE ACCESS BY INDEX SCAN(索引掃描)
在索引塊中,既存儲每個索引的鍵值,也存儲具有該鍵值的行的 ROWID
索引掃描分為兩步:
1 掃描索引得到對應的 ROWID。
2 通過 ROWID 定位到具體的行讀取數據。
索引掃描常用五種類型:
INDEX UNIQUE SCAN(索引唯一掃描)
針對唯一性索引(UNIQUE INDEX)的掃描,每次至多只返回一條記錄;
表中某字段存在 UNIQUE、PRIMARY KEY 約束時,Oracle 常實現唯一性掃描;
INDEX RANGE SCAN(索引范圍掃描)
使用一個索引存取多行數據;
發生索引范圍掃描的三種情況:
1 在唯一索引列上使用了范圍操作符(如:> < <> >= <= between);
2 在組合索引上,只使用部分列進行查詢(查詢時必須包含前導列,否則會走全表掃描);
3 對非唯一索引列上進行的任何查詢;
INDEX FULL SCAN(索引全掃描)
進行全索引掃描時,查詢出的數據都必須從索引中可以直接得到;
INDEX FAST FULL SCAN(索引快速掃描)
掃描索引中的所有的數據塊,與 INDEX FULL SCAN 類似,但是一個顯著的區別是它不對查詢出的數據進行排序(即數據不是以排序順序被返回);
INDEX SKIP SCAN(索引跳躍掃描)
表有一個復合索引,且在查詢時有除了前導列(索引中第一列)外的其他列作為條件;
6 Oracle的優化器
Oracle 的優化器種類
RBO(Rule-Based Optimization) 基于規則的優化器 --已經被拋棄,過時了
CBO(Cost-Based Optimization) 基于代價的優化器
CBO比RBO更加合理可靠,是通過計算各種可能的執行計劃的“代價”,即 COST,從中選用 COST 最低的執行方案作為實際運行方案
7 執行計劃的使用
7.1單表中使用
7.1.1分析查詢表中的所有數據
7.1.1.1 示例
查詢 employees 表中的所有數據
7.1.2分析主鍵作為條件的查詢
7.1.2.1 示例
查詢 employees 表中 employees_id 為 100 的雇員
7.1.3分析非主鍵列作為查詢條件
7.1.3.1 示例
查詢雇員名字為 Tarloy 的雇員
7.1.4分析 like 條件
7.1.4.1 示例
查詢雇員名字中含有 a 的雇員
7.1.5分析非唯一性索引列作為條件的查詢
7.1.5.1 示例一
將 last_name 創建索引
create index emp_name on employees(last_name);
7.1.5.2 示例二
查詢雇員名字為 Taylor 的雇員。
7.1.6分析非唯一性索引中=、>、< 、<>條件
7.1.6.1 示例一
對雇員薪水列做=、>、<、<>條件判斷。
7.1.6.2 示例二
對薪水創建索引,使用薪水列做=、>、<、<>條件判斷。
7.2多表
7.2.1內連接
7.2.1.1 示例一
使用等值連接,查詢所有部門以及所有部門下的雇員。
7.2.1.2 示例二
使用子查詢,查詢所有部門以及所有部門下的雇員(代價值為3,性能提升一般)
7.2.2外連接
7.2.2.1 示例一
查詢所有雇員與雇員的部門名稱,包含那些沒有部門的雇員。
7.2.2.2 示例二
查詢所有部門以及雇員,包含哪些沒有雇員的部門。
十四、 Oracle 的數據導入與導出
做數據備份--導出
做數據恢復時--導入
數據遷移--導入導出
1 數據庫導入導出需要注意
1).目標數據庫要與源數據庫有著名稱相同的表空間。
2).目標數據在進行導入時,用戶名盡量相同(這樣保證用戶的權限級別相同)。
3).目標數據庫每次在進行數據導入前,應做好數據備份。
4).目標數據導入前,弄清楚是數據覆蓋(替換),還是僅插入新數據或替換部分數據表。
5).確定目標數據庫磁盤空間是否足夠容納新數據,是否需要擴充表空間。
6).導入導出時注意字符集是否相同,一般 Oracle 數據庫的字符集只有一個,并且固定,一般不改變。
7).確定操作者的賬號權限。
2 導出數據格式:
Dmp 格式:.dmp 是二進制文件,可跨平臺,還能包含權限,效率好。
Sql 格式:.sql 格式的文件,可以文本編輯器查看,通用性比較好,效率不如第一種,適合小數據量導入導出。尤其注意的是表中不能有大字段 (blob,clob,long),如果有,會報錯。
Pde 格式:.pde 格式的文件,.pde 為 PL/SQL Developer 自有的文件格式,只能用 PL/SQLDeveloper 工具導入導出,不能用文本編輯器查看。
3 傳統方式 exp(導出)和(imp)導入:
3.1命令執行方式
該命令需要在操作系統的命令窗口執行,而非 sql/plus
3.2命令格式
exp|imp 用 戶 名 / 密 碼 @ 連 接 地 址 : 端 口 / 服 務 名 file= 路 徑 / 文 件 名 .dmp full=y|tabels(tablename,tablename...)|owner(username1,username2,username3)
exp:導出命令,導出時必寫。
imp:導入命令,導入時必寫,每次操作,二者只能選擇一個執行。
username:導出數據的用戶名,必寫;
password:導出數據的密碼,必寫;
@:地址符號,必寫;
SERVICENAME:Oracle 的服務名,必寫;---比如:orcl就是服務名
1521:端口號,1521 是默認的可以不寫,非默認要寫;
file="文件名.dmp" : 文件存放路徑地址,必寫;
full=y :表示全庫導出。可以不寫,則默認為 no,則只導出用戶下的對象;
tables:表示只導出哪些表;
owner:導出該用戶下對象;
full|tables|owner:只能使用一種(不能同時出現 );
3.3導出數據
exp 用戶名/密碼@oracle 的連接地址:端口/需要導出的服務名 file=路徑/文件名.dmp
3.3.1示例
將 HR 用戶下的對象導出。
exp hr/oracle@localhost:1521/orcl file=d:/1.dmp
3.4導入數據
imp 用戶名/密碼@oracle 的連接地址:端口/需要導出的服務名 file=路徑/文件名.dmp
3.4.1示例
將導出的 dmp 文件導入到數據庫中。
imp hr/oracle@localhost:1521/orcl file=d:/1.dmp
4 使用 PL/SQL Developer 實現數據的導入與導出
4.1導出與導入表對象
有 DMP, SQL, PDE 三種格式,他們的導出導入方法都是大同小異
總體方法如下:
1. 在PL/SQLDeveloper 的tools 工具欄中,有兩個選項 Export Tables/Inport Tables導出/導入表
2. 點擊之后會出現所有表格,選擇自己想要導出的表格,然后在下面欄中會有Oracle Eeport(dmp格式)和SQL Inserts(sql格式),選擇之后
3. 再在下 面的 Output file /Input選擇自己想要導出的位置,再點擊旁邊 Export/Inport即可
4.2數據中其他對象的導入與導出---視圖,索引,序列
注意:
當使用Export User Objects 導出到結構都是SQL結構多種不同類型的對象時,表中導出的結果只是表結構,并不會包含任何數據.要想導出包含表數據,那就只能使用Export導出導入還是使用Inport 中的SQL insert 方法
在用戶中刪除導出的內容之后,也可直接將導出的sql內容用筆記本打開之后賦值,再在新打開的command Windows 中粘貼運行,也同樣可以導入到處的內容
第三章 MySQL 數據庫的使用
一、 MySQL 簡介
1 什么是 MySQL
MySQL 是一個關系型數據庫管理系統,關系型數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。
2 MySQL 特點
MySQL 是開源的,所以你不需要支付額外的費用。
MySQL 支持大型系統的數據庫。可以處理擁有上千萬條記錄的大型數據庫。
MySQL 使用標準的 SQL 數據語言形式。
二、 MySQL 的安裝與卸載
安裝步驟:
license Agreement-->Next-->Sever Only Next-->Excute-->Tnstallation Next-->Product Configuration Next-->Type and Networking Next-->設密 碼 Next-->Windows Service Next-->Plugins and Extensions Next-->Apply Server Configuration Execute-->Finish
卸載步驟
1停止 MySQL 服務
2卸載 mysql server
3MySQL 安裝目錄
4刪除注冊表中信息
5刪除 MySQL 數據庫目錄
6刪除服務中的 MySQL
7重啟系統
三、 MySQL 的客戶端工具
1 MySQL 自帶的客戶端端工具
2 第三方客戶端工具 Navicat
四、 MySQL 與 Oracle 的區別
1 實例區別
MySQL 是輕量型數據庫,開源免費。Oracle 是收費的而且價格非常高。
MySQL 一個實例可以操作多個庫,而 Oracle 一個實例只能對應一個庫。
MySQL 安裝完后 300M 而 Oracle 有 3G 左右。
2 操作區別
主鍵: MySQL 一般使用自動增長類型,而 Oracle 則需要使用序列對象。
單引號的處理: MySQL 里可以用雙引號包起字符串,ORACLE 里只可以用單引號包
起字符串。
分頁的 SQL 語句: MYSQL 用 LIMIT,而 Oracle 需要使用內建視圖和 rownum 偽列。事務處理:MySQL 默認是自動提交,而 Oracle 默認不自動提交,需要用戶 CTL 語言進行事務提交。
這里個人見解: MySQL和Oracle對于數據物理隔離機制上的區別
Oracle裝好后會有一個實例和一個庫 庫中可以創建多個不同的表空間,每個表空間對應一個數據文件.可以創建不同的用戶分配不同的表空間,再通過表空間實現物理隔離.所以在Oracle中有一個庫就夠了.
MySQL是一個實例可以對對應多個不同的庫 在MySQL中沒有表空間這個概念我們可以創建不同的庫,每個庫用不同的用戶來操作.庫和庫之間放的是不同的數據文件,所以MySQL是通過不同的庫之間實現物理隔離.所以MySQL要先創建庫
五 操作 MySQL
1 創建數據庫:
CREATE DATABASE 數據庫名 DEFAULT CHARACTER SET 字符編碼;
1.1 示例
創建一個 test 的數據庫,并查看該數據庫,以及該數據庫的編碼。
創建數據庫:
create database test default character set utf8;
查看數據庫:
show databases;
查看數據庫編碼:
select schema_name,default_character_set_name from information_schema.schemata where schema_name = 'test';
刪除數據庫:
Drop database 數據庫名稱
2 選擇數據庫
需要在哪個庫中創建表需要先選擇該數據庫。
Use 需要選擇的庫的名稱。
2.1示例一
創建一個名稱為 zzsxt 的數據庫,編碼為 utf8。
create database zzsxt default character set = utf8;
2.2示例二
選擇該數據庫
use bjsxt;
3 MySQL 中的數據類型
1)數值類型
數值類型中的長度 m 是指顯示長度,并不表示存儲長度,只有字段指定 zerofill 時有用
例如:int(3),如果實際值是 2,如果列指定了 zerofill,查詢結果就是 002,左邊用 0 來填充
2)浮點型
3)字符串類型
4)日期類型
二進制數據(BLOB)
1)BLOB 和 TEXT 存儲方式不同,TEXT 以文本方式存儲,英文存儲區分大小寫,而 Blob
是以二進制方式存儲,不分大小寫。
2)BLOB 存儲的數據只能整體讀出。
3)TEXT 可以指定字符集,BLOB 不用指定字符集。
4 創建表與刪除表
4.1創建表
4.1.1通過 DDL 語句創建表
4.1.1.1 示例
創建一個 employees 表包含雇員 ID,雇員名字,雇員薪水。
create table employees(employee_id int,last_name varchar(30),salary float(8,2));
查看已創建的表
Show tables;
5 修改表
5.1使用 DDL 語句修改表名
ALTER TABLE 舊表名 RENAME 新表名
5.1.1示例一
創建一個 employees 表包含雇員 ID,雇員名字,雇員薪水。
create table employees(employee_id int,last_name varchar(30),salary float(8,2));
5.1.2示例二
將 employees 表名修改為 emp。
alter table employees rename emp;
5.2使用 DDL 修改列名
ALTER TABLE 表名 CHANGE COLUMN 舊列名 新列名 類型
ALTER TABLE 舊表名 RENAME 新表名
5.2.1示例
將 emp 表中的 last_name 修改為 name
alter table emp change column last_name name varchar(30);
5.3使用 DDL 語句修改列類型
ALTER TABLE 表名 MODIFY 列名 新類型
5.3.1示例
將 emp 表中的 name 的長度指定為 40
alter table emp modify name varchar(40);
5.4使用 DDL 語句添加列
ALTER TABLE 表名 ADD COLUMN 新列名 類型
5.4.1示例
在 emp 表中添加一個新的列為 commission_pct
alter table emp add column commission_pct float(4,2);
5.5使用 DDL 語句刪除列
ALTER TABLE 表名 DROP COLUMN 列名
5.5.1示例
刪除 emp 表中的 commission_pct
alter table emp drop column commission_pct;
總結
以上是生活随笔為你收集整理的mysql 导入百万级数据 几种 java_Java 修行第034天--执行计划及其使用--Oracle数据导入导出--第三章MySQL使用...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 51单片机按键控制数码管0~9_51单片
- 下一篇: mysql递归查询所有上下节点_非递归打