我有一个表,在许多其他表上由外键引用.在我的程序中,如果我想删除其中一行,我需要首先搜索依赖项并将它们呈现给用户 - "此对象依赖于表y中的x,表q中的z等".我还希望具有该表的外键的表的数量随着时间的推移而显着增长.
information_schema数据库是搜索所有依赖项的好方法吗?我试图查询它以检索所有具有我的表的外键的表的列表,然后迭代结果并从每个表中选择外键值与用户试图删除的值匹配的所有条目.我的查询如下:
SELECT * FROM `KEY_COLUMN_USAGE` kcu LEFT JOIN TABLE_CONSTRAINTS tc ON tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME WHERE tc.CONSTRAINT_TYPE='FOREIGN KEY' AND (kcu.REFERENCED_TABLE_SCHEMA='db') AND (kcu.REFERENCED_TABLE_NAME = 'testtable')
这对于确定我需要搜索的表格非常有效,但是它非常慢.查询最多需要大约1到2秒才能在我的开发机器上执行,当我在生产服务器上运行它时会减少很多,但仍然会很慢.
我需要知道以这种方式使用information_schema是不是一个坏主意.如果没有,我如何从查询中提取更好的性能.我使用的查询是否可靠或有更好的方法吗?如果是这样,我应该如何从可维护性的角度解决这个问题.