MYSQL 업데이트 및 최적화를 기억하세요
소개
오늘(2015년 8월 5일 오후 5시 34분) 데이터베이스의 테이블 구조를 조정하고 여러 필드를 추가한 후 이전 데이터를 새로 고쳤습니다. 기존 필드 url
중 하나와 일치시킨 다음 새로 추가된 필드 type
및 typeid
를 업데이트하세요. 나중에 쉘스크립트를 작성해서 데이터를 새로 실행해보니 왜 이렇게 느려졌는지 헷갈렸네요~~
장면의 재현
<code>CREATE TABLE `fuckSpeed` ( `uin` bigint(20) unsigned NOT NULL DEFAULT 0, `id` int(11) unsigned NOT NULL DEFAULT 0, `url` varchar(255) NOT NULL DEFAULT '', `type` int(11) unsigned NOT NULL DEFAULT 0, `typeid` varchar(64) NOT NULL DEFAULT '', ...... KEY `uin_id` (`uin`,`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</code>
테이블 구조는 아마도 위와 같을 것입니다(많은 필드가 생략됨). 테이블에는 결합 인덱스 uin_id
가 하나만 있으며 업데이트할 때 다음과 같은 생각이 듭니다.
- 먼저 특정 항목을 얻습니다. ID 범위에 따른 데이터 양
funkSpeed에서 id,url을 선택하세요. 여기서 id>=101 및 id<=200; - 모든 데이터를 탐색하고 각 데이터 조각을 업데이트하세요
#먼저 데이터를 처리하고 일치 유형 및 유형 ID 가져오기
update fuckSpeed set type=[type],typeid=[typeid] where id=[id]
위 아이디어를 따른 후 발견한 것은 업데이트가 초당 평균 3~5개 정도로 매우 느립니다. 업데이트할 데이터를 살펴보니 총 24시간 이상이 소요됩니다. 하루 이상.. 생각해보니 뭔가 잘못됐나 보다.
문제 발견
가장 먼저 생각한 것은 프로세스 업데이트가 1개만 있어서 속도가 많이 느려진 것이 아닌가 하는 생각이었는데 5개의 프로세스를 시작해서 세분화했습니다. ID는 다음과 같습니다
<code>./update_url.sh 0 10000 & ./update_url.sh 10000 20001 & ./update_url.sh 20001 30001 & ./update_url.sh 30002 40002 & ./update_url.sh 40003 50003 &</code>
실행해 보니 여전히 속도는 크게 개선되지 않았고, 여전히 초당 3~5건 정도 업데이트가 이루어지고 있습니다. 생각해보면 데이터를 삽입하기 전의 단계(SQL 문을 매칭하고 조합하는 것 등)에 시간을 낭비할 수 없고, 삽입할 때 문제가 있을 것입니다
내 SQL 문을 살펴보겠습니다select id,url from funkSpeed where id>=101 and id<=200;
. 여기서 커맨드라인으로 실행해 보았는데 결과는 다음과 같습니다
<code>mysql> select id,url from funkSpeed where id>=0 and id<=200; Empty set (0.18 sec)</code>
실제로 0.18초가 걸렸습니다. 이때 갑자기 조인트 인덱스를 사용하지 않았음을 깨달았습니다. 조인트 인덱스가 적용되기 위한 조건은 왼쪽에 필드가 있어야 한다는 것인데 explain으로 확인해 보니 다음과 같았습니다.
<code>mysql> explain id,url from funkSpeed where id>=0 and id<=200; +-------------+------+---------------+------+---------+------+--------+-------------+ | table | type | possible_keys | key | key_len | ref | rows | Extra | +-------------+------+---------------+------+---------+------+--------+-------------+ | funkSpeed | ALL | NULL | NULL | NULL | NULL | 324746 | Using where | +-------------+------+---------------+------+---------+------+--------+-------------+ 1 row in set (0.00 sec)</code>
그런 다음 조인트 인덱스를 사용합니다. 🎜>
mysql> select uin,id from funkSpeed where uin=10023 and id=162; +------------+----------+ | uin | id | +------------+----------+ | 10023 | 162 | +------------+----------+ 1 row in set (0.00 sec) mysql> explain select uin,id from funkSpeed where uin=10023 and id=162; +-------------+------+---------------+----------+---------+-------------+------+-------------+ | table | type | possible_keys | key | key_len | ref | rows | Extra | +-------------+------+---------------+----------+---------+-------------+------+-------------+ | funkSpeed | ref | uin_id | uin_id | 12 | const,const | 4 | Using index | +-------------+------+---------------+----------+---------+-------------+------+-------------+ 1 row in set (0.00 sec)거의 2차 확인이라고 보시면 됩니다. 이때 기본적으로 인덱스에 문제가 발생했다는 결론을 내릴 수 있습니다.<p></p> 선택하면 횟수가 상대적으로 많습니다. 작고 두 선택 항목 각각의 ID 차이가 10,000이므로 여기서는 무시할 수 있으며 ID에 인덱스를 추가하지 않으면 여기서 최적화할 수 있는 방법이 없습니다. <p></p> <p>에서 문제가 발생합니다. 내 mysql 버전이 5.5이고 <code>update fuckSpeed set type=[type],typeid=[typeid] where id=[id]
일 수 없습니다. 그렇지 않으면 여기서 32w+를 업데이트해야 한다는 것을 확실히 확인할 수 있습니다. 데이터 하나하나가 업데이트되는데 데이터 하나하나가 2초정도 걸리네요 너무 무섭네요~~explain update
문제해결문제를 찾으면 훨씬 수월해집니다 해결~~ 선택 시필드를 추가하고, 아래와 같이
코드를 3번, 5번, 2번 변경한 후 효과를 확인하기 위해 프로세스를 시작했지만, 효과는 조금도 개선되지 않았으며 평균 30번 이상이었습니다. , 약 3시간이 소요되었습니다. 모든 업데이트가 완료되었습니다. WeChat ID: love_skillsuin
로 변경한 후, 업데이트 시select uin,id,url from funkSpeed where id>=101 and id<=200;
를 사용하여 인덱스를 사용하도록 합니다.update fuckSpeed set type=[type],typeid=[typeid] where uin=[uin] id=[id]
열심히 노력할수록 행운이 찾아옵니다! 운이 좋을수록 더 열심히 일하세요! CEO는 꿈이 아니다바이푸메이 우승은 꿈이 아니다언니의 반격은 꿈이 아니다지금이다! ! 어서위 내용은 내용의 측면을 포함하여 MYSQL 업데이트의 최적화를 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Windows 11/10의 이벤트 뷰어에서 이벤트 ID 55, 50, 140, 98이 발견되거나, 디스크 파일 시스템 구조가 손상되어 사용할 수 없다는 오류가 발생하는 경우, 아래 안내에 따라 문제를 해결하시기 바랍니다. 이벤트 55, 디스크의 파일 시스템 구조가 손상되어 사용할 수 없음은 무엇을 의미합니까? 세션 55에서 Ntfs 디스크의 파일 시스템 구조가 손상되어 사용할 수 없습니다. 볼륨에서 chkMSK 유틸리티를 실행하십시오. NTFS가 트랜잭션 로그에 데이터를 쓸 수 없으면 이벤트 ID 55의 오류가 트리거되어 NTFS가 트랜잭션 데이터를 쓸 수 없는 작업을 완료하지 못하게 됩니다. 이 오류는 일반적으로 디스크에 불량 섹터가 있거나 파일 시스템의 디스크 하위 시스템이 부적절하여 파일 시스템이 손상된 경우에 발생합니다.

AppleID를 사용하여 iTunesStore에 로그인하면 "이 AppleID는 iTunesStore에서 사용되지 않았습니다"라는 오류가 화면에 표시될 수 있습니다. 걱정할 오류 메시지는 없습니다. 다음 솔루션 세트에 따라 문제를 해결할 수 있습니다. 수정 1 – 배송 주소 변경 iTunes Store에 이 메시지가 나타나는 주된 이유는 AppleID 프로필에 올바른 주소가 없기 때문입니다. 1단계 – 먼저 iPhone에서 iPhone 설정을 엽니다. 2단계 – AppleID는 다른 모든 설정보다 우선해야 합니다. 그러니 열어보세요. 3단계 – 거기에서 “결제 및 배송” 옵션을 엽니다. 4단계 – Face ID를 사용하여 액세스 권한을 확인하세요. 단계

Alibaba 소프트웨어에서는 계정 등록이 완료되면 시스템에서 플랫폼에서 귀하의 신원 역할을 하는 고유 ID를 할당합니다. 하지만 많은 사용자들은 자신의 ID를 조회하고 싶지만 어떻게 해야 할지 모릅니다. 그러면 이 웹사이트의 편집자가 아래 전략 단계에 대한 자세한 소개를 제공할 것입니다. 도움이 되기를 바랍니다! 알리바바 ID에 대한 답변을 찾을 수 있는 곳: [Alibaba]-[My]. 1. 먼저 홈페이지에 들어간 후 오른쪽 하단에 있는 [내]를 클릭해야 합니다. 2. 그런 다음 내 페이지로 이동하면 페이지 상단에 [id]가 표시됩니다. 아이디는 타오바오와 동일한가요? 알리바바 아이디와 타오바오 아이디는 다른데 둘이 맞나요?
![이벤트 ID 4660: 개체가 삭제되었습니다. [수정]](https://img.php.cn/upload/article/000/887/227/168834320512143.png?x-oss-process=image/resize,m_fill,h_207,w_330)
독자 중 일부는 이벤트 ID4660을 경험했습니다. 그들은 무엇을 해야 할지 확신하지 못하는 경우가 많으므로 이 가이드에서 이에 대해 설명합니다. 이벤트 ID 4660은 일반적으로 개체가 삭제될 때 기록되므로 컴퓨터에서 이 문제를 해결할 수 있는 몇 가지 실용적인 방법도 살펴보겠습니다. 이벤트 ID4660이란 무엇입니까? 이벤트 ID 4660은 Active Directory의 개체와 관련되어 있으며 다음 요소에 의해 트리거됩니다. 개체 삭제 – Active Directory에서 개체가 삭제될 때마다 이벤트 ID 4660이 포함된 보안 이벤트가 기록됩니다. 수동 변경 - 사용자 또는 관리자가 개체의 사용 권한을 수동으로 변경할 때 이벤트 ID 4660이 생성될 수 있습니다. 이는 권한 설정을 변경하거나, 액세스 수준을 수정하거나, 사람이나 그룹을 추가 또는 제거할 때 발생할 수 있습니다.

Tencent Video ID는 어디서 확인할 수 있나요? Tencent Video 앱에는 전용 ID가 있지만 대부분의 사용자는 Tencent Video ID를 확인하는 방법을 모릅니다. 다음은 Tencent Video ID를 확인하는 방법에 대한 그래픽 튜토리얼입니다. 관심 있는 사용자를 위한 편집자입니다. Tencent Video 사용 튜토리얼 Tencent Video ID 확인 방법 1. 먼저 Tencent Video 앱을 열고 메인 페이지 오른쪽 하단의 [개인 센터]를 통해 특별 영역에 들어갑니다. 2. 그런 다음 개인 센터 페이지에 들어가서 [ 3. 설정 페이지로 이동하여 하단의 [계정 탈퇴]를 클릭하세요. 4. 마지막으로 아래와 같은 페이지에서 전용 ID 번호를 확인할 수 있습니다.

getElementById가 "created()" 후크 함수에 사용되고 Vue가 마운트를 완료하지 않았기 때문에 Vue는 id 속성을 얻을 수 없습니다. 해결책은 "created() {let serachBox = document.getElementById('searchBox') ;.. .}" 코드는 "mounted()" 후크 기능으로 마이그레이션될 수 있습니다.

jquery에서 선택 요소를 숨기는 방법: 1. hide() 메서드, HTML 페이지에 jQuery 라이브러리를 도입하고 다른 선택기를 사용하여 선택 요소를 숨길 수 있습니다. ID 선택기는 selectId를 선택한 선택 요소의 ID로 바꿉니다. 2. css() 메서드, ID 선택기를 사용하여 숨겨야 하는 선택 요소를 선택하고, css() 메서드를 사용하여 표시 속성을 없음으로 설정하고, selectId를 선택 요소의 ID로 바꿉니다.

golang을 사용한 SelectChannelsGo 동시 프로그래밍의 비동기 처리 방법 소개: 동시 프로그래밍은 현대 소프트웨어 개발에서 중요한 영역으로, 애플리케이션의 성능과 응답성을 효과적으로 향상시킬 수 있습니다. Go 언어에서는 채널 및 Select 문을 사용하여 동시 프로그래밍을 간단하고 효율적으로 구현할 수 있습니다. 이 기사에서는 SelectChannelsGo 동시 프로그래밍의 비동기 처리 방법에 golang을 사용하는 방법을 소개하고 구체적인 내용을 제공합니다.
