如下摘自官方文档:https://dev.mysql.com/doc/refman/5.7/en/insert.htmlphp
语法:html
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM [PARTITION (,...)] [WHERE ] [ORDER BY ...] [LIMIT ]
性能:
When you do not need to know the number of deleted rows, the statement is a faster way to empty a table than a statement with no clause. Unlike , cannot be used within a transaction or if you have a lock on the table. SeeSection 14.1.34, “TRUNCATE TABLE Syntax” and Section 14.3.5, “LOCK TABLES and UNLOCK TABLES Syntax”.
简单理解是:truncate 在不锁表的状况下,很快:
若是想用delete删除快点:
The time required to delete individual rows in a table is exactly proportional to the number of indexes. To delete rows more quickly, you can increase the size of the key cache by increasing the system variable
能够配置的key_buffer_size大小
多表删除:
(1)不带别名tbl_namepartition_namewhere_conditionrow_countTRUNCATE TABLEDELETEWHEREDELETETRUNCATE TABLEMyISAMkey_buffer_size
DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id;
Or:mysql
DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id;
(2)带别名:必须写别名:
If you declare an alias for a table, you must use the alias when referring to the table:sql
DELETE t1 FROM test AS t1, test2 WHERE ...
Correct:性能
DELETE a1, a2 FROM t1 AS a1 INNER JOIN t2 AS a2 WHERE a1.id=a2.id; DELETE FROM a1, a2 USING t1 AS a1 INNER JOIN t2 AS a2 WHERE a1.id=a2.id;
二、删除mysql 中重复记录,并保留一条
DELETE FROM `tb_phones` WHERE id NOT IN(SELECT * FROM(SELECT id FROM `tb_phones` GROUP BY phone)AS b);