mysql - 什么时候最好不要使用 inner join?

标签 mysql sql-server performance optimization jdbc

我有两个表:

table1 (id, name, connte)
table2 (id, name, connte)

它们通过table1.conntetable2.connte 连接。每条记录包含 100 条记录。

现在,如果我想从表 1 中删除一条 id = 20 的记录及其在表 2 中的相应子项,是否最好执行以下操作:

   DELETE d1,d2 FROM table1 d1 INNER JOIN table2 d2 ON d1.connte= d2.connte WHERE d1.id = 20

或以下内容:

  select connte from table1 where id = 20
  --Store connte in a variable say aabc--
  delete from table2 where connte = aabc   -> execute this first
  delete from table1 where id = 20    -> execute this second

如果我要删除的记录只有一个父项和一个子项(这里table1.id =20),那么对整个表进行内部连接不是很昂贵吗?

我正在从 JAVA(因此是 JDBC)运行此查询,那么对于上述情况,运行多个查询或内部联接是否更昂贵(性能方面)?

注意:假设表没有引用完整性。所以,我没有使用级联删除。

最佳答案

在一次查询中执行此操作可能比两次查询更快。您基本上是在尝试自己进行优化,而不是让 DBMS 进行优化,通常 DBMS 非常擅长这类工作。

此外,您可能不必担心这么小的表的删除性能。 100 x 100 行仍然很小,因此您的 DBMS 应该能够毫无问题地处理它。

关于mysql - 什么时候最好不要使用 inner join?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10898784/

相关文章:

mysql - 如何计算每天具有不同 IP 地址的行数?

MySQL 问题 : autoID not starting with 1

java - 使用字符 `‡` 插入和更新 - SQL Server

sql - 修改SQL Server中的xml元素名称

在运行时编译常量

java - 从 Java 插入到 SQL Server 时,我可以获得类似 "BULK INSERT"的速度吗?

Mysql IN 在 5.1 上停止工作

MySQL 存储函数在运行时不返回相同的结果 - 检索父 ID

c# - 使用 ObjectContext 从存储过程中检索多个结果集

nginx - 为服务器大量静态内容调整 Nginx/CentOS