場景:在給一張有幾萬條記錄的表添加索引時,進度非常慢,導致其它查詢無法進行
處理方式:
使用Navicat的命令行模式,執行以下命令:
show processlist;
這時會看到有哪些線程正在執行,也可以查看鎖表的線程。你會發現alter table * add key ****那個線程狀態是Waiting for table metadata lock,后面有個這個表的所有操作都是這個狀態,很明顯是這條加索引的語句把表給鎖了。
查看線程ID,執行
kill 線程ID
這樣被鎖住的表就能立即被使用了。
由此得出一個結論,當一張表數據量很大時,不要輕易添加索引,會導致表被鎖死!如果非要添加,那么應該先把數據表進行備份,然后進行空表添加索引。