my sql 과 Oacle 의 차이 점 소결(기능 성능,선택,사용 시의 sql 등 대비)
동시성 은 oltp 데이터베이스 의 가장 중요 한 특성 이지 만 동시에 자원 의 획득,공유 와 잠 금 과 관련된다.
mysql:
my sql 은 표 급 잠 금 을 위주 로 자원 잠 금 의 입도 가 매우 큽 니 다.만약 에 하나의 session 이 표 에 잠 금 시간 이 너무 길 면 다른 session 에서 이 표 의 데 이 터 를 업데이트 할 수 없습니다.
InnoDB 엔진 의 시 계 는 줄 잠 금 을 사용 할 수 있 지만 이 줄 잠 금 메커니즘 은 표 의 색인 에 의존 합 니 다.표 에 색인 이 없 거나 sql 문 구 는 색인 을 사용 하지 않 으 면 표 급 잠 금 을 사용 합 니 다.
oracle:
Oacle 은 줄 잠 금 을 사용 하여 자원 잠 금 의 입도 가 매우 작 습 니 다.sql 에 필요 한 자원 만 잠 그 고 잠 금 을 추가 하 는 것 은 데이터베이스 에 있 는 데이터 줄 에 의존 하지 않 고 색인 에 의존 하지 않 습 니 다.그래서 Oacle 은 동시성 에 대한 지지 가 훨씬 좋 습 니 다.
일치 성
oracle:
Oacle 은 serializable 의 격 리 단 계 를 지원 하여 최고 수준의 읽 기 일치 성 을 실현 할 수 있 습 니 다.각 session 을 제출 한 후 다른 session 에서 만 제출 한 변경 사항 을 볼 수 있 습 니 다.Oacle 은 undo 표 공간 에서 다 중 버 전 데이터 블록 을 구성 하여 읽 기 일치 성 을 실현 합 니 다.
모든 session 조회 시 대응 하 는 데이터 블록 에 변화 가 생기 면 Oacle 은 undo 표 공간 에서 이 session 구조 로 조회 할 때의 오래된 데이터 블록 을 구성 합 니 다.
mysql:
my sql 은 Oacle 과 같은 다 중 버 전 데이터 블록 을 구성 하 는 메커니즘 이 없고 read comitted 의 격 리 단계 만 지원 합 니 다.하나의 session 이 데 이 터 를 읽 을 때 다른 session 은 데 이 터 를 변경 할 수 없 지만 표 마지막 에 데 이 터 를 삽입 할 수 있 습 니 다.
session 에서 데 이 터 를 업데이트 할 때 열 쇠 를 추가 해 야 합 니 다.다른 session 에 서 는 데이터 에 접근 할 수 없습니다.
실무,일,총무
Oacle 은 일찍부터 업 무 를 완전히 지원 했다.
my sql 은 innodb 메모리 엔진 의 줄 잠 금 상태 에서 만 사 무 를 지원 합 니 다.
4.데이터 지속 성
oracle
제출 한 데 이 터 를 복구 할 수 있 도록 보장 합 니 다.Oacle 은 제출 한 sql 작업 선 을 온라인 로그 파일 에 기록 하여 디스크 에 유지 하고 있 기 때 문 입 니 다.
데이터베이스 나 호스트 가 이상 하 게 재 부팅 되면 재 부팅 후 Oacle 은 온라인 로 그 를 통 해 고객 이 제출 한 데 이 터 를 복원 할 수 있 습 니 다.
mysql:
기본적으로 sql 문 구 를 제출 하지만 업데이트 과정 에서 db 나 호스트 재 부팅 문제 가 발생 하면 데 이 터 를 잃 어 버 릴 수 있 습 니 다.
5.제출 방식
Oacle 은 기본적으로 자동 으로 제출 되 지 않 습 니 다.사용자 가 수 동 으로 제출 해 야 합 니 다.
my sql 기본 값 은 자동 으로 제출 합 니 다.
6.논리 백업
Oacle 논리 백업 시 데 이 터 를 잠 그 지 않 고 백업 한 데 이 터 는 일치 합 니 다.
my sql 논리 백업 시 데 이 터 를 잠 가 야 백업 데이터 가 일치 하고 업무 의 정상 적 인 dml 사용 에 영향 을 줄 수 있 습 니 다.
7.열 백업
Oacle 은 성숙 한 열 준비 도구 rman 이 있 습 니 다.열 준비 시 사용자 가 데이터 베 이 스 를 사용 하 는 데 영향 을 주지 않 습 니 다.백업 한 데이터베이스 가 일치 하지 않 더 라 도 복구 할 때 압축 파일 로그 와 온라인 으로 로 그 를 다시 작성 하여 일치 하 는 답장 을 할 수 있 습 니 다.
mysql:
my isam 의 엔진 은 my sql 자체 가 가지 고 있 는 my sql hostcopy 열 로 준비 할 때 시계 에 읽 기 자 물 쇠 를 추가 하여 dml 작업 에 영향 을 주어 야 합 니 다.
innodb 엔진 은 innodb 의 표 와 색인 을 백업 하지만.frm 파일 은 백업 하지 않 습 니 다.ibbackup 으로 백업 할 때 백업 기간 의 데이터 변 화 를 기록 하 는 로그 파일 이 있 기 때문에 다른 사용자 가 데이터 베 이 스 를 사용 하 는 데 영향 을 주지 않 고 잠 그 지 않 아 도 됩 니 다.이 도 구 는 유 료 입 니 다.
innobackup 은 ibbackup 과 결합 하여 사용 하 는 스 크 립 트 입 니 다.frm 파일 백업 에 협조 할 것 입 니 다.
8.sql 문장의 확장 과 유연성
my sql 은 sql 문 구 를 매우 실 용적 이 고 편리 하 게 확장 할 수 있 습 니 다.예 를 들 어 limit 기능,insert 는 한 번 에 여러 줄 의 데 이 터 를 삽입 할 수 있 습 니 다.select 일부 관리 데 이 터 는 from 을 추가 하지 않 아 도 됩 니 다.
Oacle 은 이 방면 에서 더욱 진중 하고 전통 적 인 느낌 을 준다.
복사
Oacle:밀어 내 거나 끌 어 당 기 는 전통 적 인 데이터 복사 도 있 고 dataguard 의 더 블 컴퓨터 나 다 중 컴퓨터 재해 방지 체제 도 있 습 니 다.메 인 라 이브 러 리 에 문제 가 발생 하면 자동 으로 라 이브 러 리 를 메 인 라 이브 러 리 로 전환 할 수 있 지만 설정 관리 가 복잡 합 니 다.
my sql:복사 서버 설정 은 간단 하지만 메 인 라 이브 러 리 에 문제 가 생 겼 을 때 총 라 이브 러 리 는 일정한 데 이 터 를 잃 어 버 릴 수 있 습 니 다.주 라 이브 러 리 로 수 동 으로 전환 해 야 합 니 다.
성능 진단
Oacle 은 각종 성숙 한 성능 진단 변조 도 구 를 가지 고 있어 많은 자동 분석,진단 기능 을 실현 할 수 있다.예 를 들 어 awr,addm,sqltrace,tkproof 등
my sql 의 진단 변조 방법 이 비교적 적 고 주로 느 린 조회 로그 가 있 습 니 다.
11.권한 과 안전
my sql 의 사용 자 는 호스트 와 관련 되 어 의미 가 없 으 며,또한 호스트 와 ip 를 모방 하여 이용 할 수 있 는 기회 가 있 습 니 다.
oracle 의 권한 과 안전 개념 은 전통 적 이 고 규범 에 맞다.
12.분 구 표 와 분 구 색인
Oacle 의 파 티 션 시트 와 파 티 션 색인 기능 이 성숙 하여 사용자 가 db 에 접근 하 는 체험 을 향상 시 킬 수 있 습 니 다.
my sql 의 파 티 션 시트 는 아직 성숙 하지 않 고 안정 적 이지 않 습 니 다.
13.관리 도구
Oacle 은 여러 가지 성숙 한 명령 행,그래 픽 인터페이스,웹 관리 도구 가 있 고 제3자 의 관리 도구 도 많아 서 관리 가 매우 편리 하고 효율 적 입 니 다.
mysql 관리 도구 가 비교적 적 고 linux 에서 관리 도구 의 설 치 는 때때로 추가 패키지(phpmyadmin,etc)를 설치 해 야 하기 때문에 어느 정도 복잡성 이 있다.
14.기술 지원
Oacle 에 문제 가 생기 면 고객 센터 를 찾 을 수 있 습 니 다.
mysq 문제 가 생기 면 스스로 해결한다
15.권한 수여
Oacle 요금
mysq 오픈 소스-무료
선택
돈 이 있 으 면 조언 으로 Oacle 을 사용 하 세 요.
돈 도 없고 수 요 를 만족 시 킬 수 있 으 니 mysq 를 사용 하 는 것 을 권장 합 니 다.알 리 바 바,위 키 백과 등 대형 프로젝트 도 my sql 을 사 용 했 고 사람들 은 주로 분포 식 저장,캐 시,분 표 라 이브 러 리 등 기술 을 사용 했다)
다음은 다른 글 입 니 다.주로 sql 측면 에서 비교 합 니 다.
Oracle 데이터베이스 와 MySQL 데이터베이스 의 차 이 는 본 고 에서 우리 가 주로 소개 한 내용 으로 귀하 께 도움 이 되 기 를 바 랍 니 다.
1.그룹 함수 사용법 규칙
my sql 에서 그룹 함 수 는 selection 구문 에서 마음대로 사용 할 수 있 지만 Oacle 에서 검색 어 에 그룹 함수 가 있다 면 다른 열 이름 은 그룹 함수 가 처리 하거나 group by 자구 의 열 이 어야 합 니 다.그렇지 않 으 면 오 류 를 보고 해 야 합 니 다.
eg:
select name,count(money) from user;이것 은 my sql 에 넣 어도 문제 가 없습니다.Oacle 에 문제 가 있 습 니 다.
사용자 그룹 에서 name,count(money)를 name 또는 select max(name),count(money)로 선택 합 니 다.
Oacle 에 서 는 틀 리 지 않 습 니 다.마찬가지 로 이 두 가지 상황 은 my sql 에서 도 틀 리 지 않 습 니 다.
2.자동 으로 증가 하 는 데이터 형식 처리
MYSQL 은 자동 으로 증가 하 는 데이터 형식 이 있 습 니 다.기록 을 삽입 할 때 이 필드 를 조작 하지 않 아 도 데이터 값 을 자동 으로 얻 을 수 있 습 니 다.ORACLE 는 자동 으로 증가 하 는 데이터 형식 이 없습니다.자동 으로 증가 하 는 시리 얼 번 호 를 만들어 야 합 니 다.기록 을 삽입 할 때 시리 얼 번호 의 다음 값 을 이 필드 에 부여 해 야 합 니 다.
CREATE SEQUENCE 시리 얼 번호 의 이름(표 명+시리 얼 번호 표시 가 좋 습 니 다)INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;
그 중에서 가장 큰 값 은 필드 의 길이 에 따라 정 의 됩 니 다.자동 으로 증가 하 는 시리 얼 번호 NUMBER(6)를 정의 하면 최대 값 은 9999999 입 니 다.
INSERT 문 구 는 이 필드 값 을 삽입 합 니 다:시리 얼 번호 의 이름.NEXTVAL
3.따옴표 처리
MYSQL 에 서 는 작은 따옴표 로 문자열 을 묶 을 수 있 고,ORACLE 에 서 는 작은 따옴표 로 만 문자열 을 묶 을 수 있 습 니 다.문자열 을 삽입 하고 수정 하기 전에 작은 따옴표 로 바 꿔 야 합 니 다.나타 나 는 모든 작은 따옴표 를 두 개의 작은 따옴표 로 바 꿔 야 합 니 다.
4.페이지 를 넘 긴 SQL 문장의 처리
MYSQL 은 페이지 를 넘 기 는 SQL 문 구 를 처리 하 는 것 이 비교적 간단 하 며 LIMIT 로 위 치 를 시작 하여 개 수 를 기록 합 니 다.PHP 에 서 는 결과 집의 위 치 를 SEK 로 찾 을 수도 있 습 니 다.오 라 클 은 페이지 를 넘 기 는 SQL 문 구 를 처리 하 는 것 이 비교적 번거롭다.결과 집합 마다 하나의 ROWNUM 필드 만 그 위 치 를 표시 하고 ROWNUM<100,ROWNUM>80 만 사용 할 수 있 습 니 다.
다음은 분석 을 통 해 좋 은 두 가지 ORACLE 페이지 SQL 문장(ID 는 유일한 키워드 의 필드 이름)입 니 다.
문장 1:
SELECT ID, [FIELD_NAME,...] FROM TABLE_NAME WHERE ID IN ( SELECT ID FROM (SELECT ROWNUM AS NUMROW, ID FROM TABLE_NAME WHERE 조건 1 ORDER BY 조건 2)NUMROW>80 및 NUMROW<100)ORDER BY 조건 3;
문장 2:
SELECT * FROM (( SELECT ROWNUM AS NUMROW, c.* from (select [FIELD_NAME,...] FROM TABLE_NAME WHERE 조건 1 ORDER BY 조건 2)c)NUMROW>80 및 NUMROW<100)ORDER BY 조건 3;
5.긴 문자열 처리
긴 문자열 의 처리 ORACLE 에 도 특별한 점 이 있 습 니 다.INSERT 와 UPDATE 시 최대 동작 가능 한 문자열 의 길 이 는 4000 개의 단일 바이트 보다 작 습 니 다.더 긴 문자열 을 삽입 하려 면 필드 용 CLOB 형식 을 고려 하여 ORACLE 에 있 는 DBMS 를 사용 하 십시오.LOB 패키지.수정 기록 을 삽입 하기 전에 비 어 있 거나 길이 판단 을 해 야 합 니 다.빈 필드 값 과 길이 초과 필드 값 에 대해 경 고 를 하고 마지막 작업 으로 돌아 가 야 합 니 다.
6.날짜 필드 처리
MYSQL 날짜 필드 는 DATE 와 TIME 두 가지 로 나 뉘 며,ORACLE 날짜 필드 는 DATE 만 있 으 며,연월일 시 분 초 정 보 를 포함 하고 있 으 며,현재 데이터 베 이 스 를 사용 하 는 시스템 시간 은 SYSDATE 로 초 까지 정확 하거나 문자열 로 날짜 형 함수 TO 로 변환 합 니 다.DATE('2001-08-01','YYYY-MM-DD')년-월-일 24 시간:분:초의 격식 YYY-MM-DD HH24:MI:SS TODATE()는 아직 여러 가지 날짜 형식 이 있 습 니 다.ORACLE DOC.날짜 형 필드 를 참조 하여 문자열 함수 TO 로 변환 할 수 있 습 니 다.CHAR(‘2001-08-01','YYYY-MM-DD HH24:MI:SS')
날짜 필드 의 수학 연산 공식 은 매우 크게 다르다.MYSQL 현재 시간 7 일 전 DATE 찾기FIELD_NAME>SUBDATE(NOW(),INTERVAL 7 DAY)ORACLE 찾기 현재 시간 7 일 전 DATEFIELD_NAME >SYSDATE - 7;
MYSQL 에 현재 시간 을 삽입 하 는 몇 가지 함 수 는 NOW()함수 가'YYYY-MM-DD HH:MM:SS'로 현재 날짜 시간 을 되 돌려 주 고 DATETIME 필드 에 직접 저장 할 수 있 습 니 다.CURDATE()는'YYYY-MM-DD'형식 으로 오늘 날 짜 를 되 돌려 주 며 DATE 필드 에 바로 저장 할 수 있 습 니 다.CURTIME()는'HH:MM:SS'형식 으로 현재 시간 을 되 돌려 줍 니 다.TIME 필드 에 바로 저장 할 수 있 습 니 다.예:tablename(fieldname)값(now())에 삽입
Oacle 의 현재 시간 은 sysdate 입 니 다.
7.빈 문자 처리
MYSQL 의 비 어 있 는 필드 에 도 비어 있 는 내용 이 있 습 니 다.ORACLE 에 서 는 비 어 있 는 필드 를 정의 하면 비어 있 는 내용 을 허용 하지 않 습 니 다.MYSQL 의 NOT NULL 에 따라 ORACLE 표 구 조 를 정의 합 니 다.데 이 터 를 가 져 올 때 오류 가 발생 할 수 있 습 니 다.따라서 데 이 터 를 가 져 올 때 빈 문 자 를 판단 해 야 합 니 다.NULL 이나 빈 문자 라면 빈 문자열 로 바 꿔 야 합 니 다.
8.문자열 의 모호 한 비교
MYSQL 에 서 는 필드 이름 like%'문자열%',ORACLE 에 서 는 필드 이름 like%'문자열%'를 사용 할 수 있 지만 이 방법 은 색인 을 사용 할 수 없고 속도 가 빠 르 지 않 으 며 문자열 로 함수 인 스 터(필드 이름,'문자열')>0 을 비교 하면 더욱 정확 한 검색 결 과 를 얻 을 수 있 습 니 다.
9.프로그램 과 함수 에서 데이터 베 이 스 를 조작 하 는 작업 이 끝 난 후에 결과 집합 과 지침 의 방출 에 주의 하 십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 JSON 인덱싱 - aarondfrancis사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 말하지만 완전히 정확하지는 않습니다. MySQL로 JSON 열을 인덱싱하는 것은 완전히 가능합니다! 사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.