2014-01-17 1 views
-2

..최적화 삽입 및 업데이트 방법 내 삽입 및 업데이트 쿼리를 최적화하는 쿼리

업데이트 쿼리 :

UPDATE `cp_sessions` 
    SET `last_activity` = 1389937578, 
     `user_id` = NULL, 
     `user_data` = 'a:3:{s:9:\"game_name\";s:5:\"poker\";s:3:\"utm\";N;s:5:\"url_1\";s:23:\"http://adda52merge.org/\";}' 
    WHERE `session_id` = '52b4aae2432db5c8236523e5357fb48d'; 

삽입 쿼리 :

INSERT INTO `cp_sessions` 
    (`session_id`, `ip_address`, `user_agent`, `last_activity`) 
VALUES (
    'a68ca9a8d4b4f9462b4439bc60d05e91', 
    '192.168.1.235', 
    'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko', 1389937583); 
그것은 걸릴 것

Query_time : 1.654473

+0

Innodb, myisam을 사용중인 테이블은 무엇입니까? 테이블 크기는 얼마입니까? 초당/분당 몇 개의 글이 있습니까? 테이블의 기본 키는 무엇입니까? session_id? 어떤 인덱스가 정의되어 있습니까? – aconrad

+0

안녕하세요, 테이블 이름 == innodb, 테이블 크기 ==. 02mb, 초, 아니 기본 키 및 인덱스 .. 그래서 내 쿼리를 모두 삽입 및 업데이트 조건을 최적화 할 수 말해주십시오. – Rajan

답변

1

테이블에 기본 키가 없다면 추가하십시오. session_id 기본 키가있는 경우이 키는 고유하며 동일한 session_id 값을 사용하는 두 개의 레코드가 없습니다. 중복 SESSION_ID 값이있는 경우

ALTER TABLE `cp_sessions` 
CHANGE COLUMN `session_id` `session_id` VARCHAR(32) NOT NULL FIRST, 
ADD PRIMARY KEY (`session_id`); 

, 다음 업데이트를 실행하지 않고,

CREATE TABLE blah LIKE cp_sessions; 
    ALTER TABLE `blah` CHANGE COLUMN `session_id` `session_id` VARCHAR(32) NOT NULL FIRST, 
ADD PRIMARY KEY (`session_id`); 
    INSERT IGNORE INTO blah SELECT * FROM cp_sessions; 
    RENAME TABLE cp_sessions TO cp_session_old, blah TO cp_sessions; 

당신이, 당신이 무엇을하고 있는지 을 수행하거나 단일 쿼리를 가질 수 유지할 수 있습니다이 방법처럼 그들을 취소 갈라져.

INSERT INTO `cp_sessions` 
    (`session_id`, `ip_address`, `user_agent`, `last_activity`) 
VALUES (
    'a68ca9a8d4b4f9462b4439bc60d05e91', 
    '192.168.1.235', 
    'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko', 1389937583) 
ON DUPLICATE KEY UPDATE last_activity = VALUES(last_activity), user_agent = VALUES(user_agent);