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從庫,加索引可以大大優化查詢性能。但是直接添加索引可能會導致系統瓶頸,因此我們需要對數據進行分批次處理,具體操作可以參考上述代碼。