欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

mysql從庫千萬數據加索引

林玟書2年前9瀏覽0評論

MySQL是一種開源關系型數據庫管理系統,廣泛用于各種應用場景。為了優化查詢性能,如何加索引是非常重要的。本文將介紹如何在MySQL從庫上對千萬級數據加索引。

首先,在MySQL從庫上創建索引,可以使用如下語句:

ALTER TABLE table_name ADD INDEX index_name(column_name);

其中,table_name是你要添加索引的表名,column_name是你要添加索引的列名,index_name是你添加的索引的名稱。在實際操作中,建議使用EXPLAIN命令來檢查查詢語句是否使用了索引。

此外,為了優化查詢性能,可以同時在多列上添加索引,如:

ALTER TABLE table_name ADD INDEX index_name(column_name1, column_name2);

對于千萬級數據的表,如果直接添加索引可能會導致系統瓶頸,因此我們需要對數據進行分批次處理。具體操作如下:

SET SESSION innodb_autoinc_lock_mode=2;
SET SESSION unique_checks=0;
SET SESSION foreign_key_checks=0;
SET SESSION tx_isolation='READ-UNCOMMITTED';
ALTER TABLE table_name ENGINE=InnoDB;
ALTER TABLE table_name ADD PRIMARY KEY(id), ALGORITHM=INPLACE, LOCK=NONE;
ALTER TABLE table_name ADD INDEX index_name(column_name1, column_name2), ALGORITHM=INPLACE, LOCK=NONE;
SELECT MIN(id), MAX(id) INTO @minID, @maxID FROM table_name;
SET @step = 100000;
SET @start = @minID;
WHILE @start<= @maxID DO
SET @end = @start + @step - 1;
IF @end >@maxID THEN
SET @end = @maxID;
END IF;
ALTER TABLE table_name ADD INDEX index_name(column_name1, column_name2), ALGORITHM=INPLACE, LOCK=NONE,
ALGORITHM=COPY, LOCK=SHARED, ONLINE, WAIT=NOWAIT, 
PROCESSLIST_INFO = CONCAT('create index index_name on table_name (col1, col2) where id between ', 
@start, ' and ', @end);
SET @start = @end + 1;
END WHILE;
SET SESSION innodb_autoinc_lock_mode=1;
SET SESSION unique_checks=1;
SET SESSION foreign_key_checks=1;
SET SESSION tx_isolation='READ-COMMITTED';

以上代碼的作用是將當前SESSION中自動遞增鎖定模式設置為2,唯一性檢查和外鍵檢查設置為0。然后將表的存儲引擎設置為InnoDB,并在id列上添加主鍵,同時添加索引。接著按照步長循環,設置索引的映射條件,最后執行查詢命令。

總結:對于千萬級數據的MySQL從庫,加索引可以大大優化查詢性能。但是直接添加索引可能會導致系統瓶頸,因此我們需要對數據進行分批次處理,具體操作可以參考上述代碼。