gpt4 book ai didi

mysql - 查询 MySQL information_schema 数据库是查找相关表的好方法吗?

转载 作者:可可西里 更新时间:2023-11-01 06:32:17 25 4
gpt4 key购买 nike

我有一个表,它被许多其他表上的外键引用。在我的程序中,如果我想删除这些行之一,我需要首先搜索依赖项并将它们呈现给用户——“这个对象依赖于表 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 是否是个坏主意。如果没有,我如何从查询中提取更好的性能。我使用的查询是可靠的还是有更好的方法?如果是这样,我应该如何从可维护性的角度最好地解决这个问题。

最佳答案

Dvorak 是对的,INFORMATION_SCHEMA 就是为此而设计的。

关于您的性能问题,有几种方法可以提高性能

  • 简单的方法,但不会有太大的改进:将信息存储在静态变量中。至少每页只查询一次

  • 使用持久缓存:替代的 PHP 缓存可以帮助您(参见 http://fr3.php.net/manual/en/book.apc.php)。您将从信息架构中获得的信息非常适合存储在持久性缓存中。

  • 使用 ORM 库,例如 doctrine ( http://www.doctrine-project.org/ )查看文件 lib/Doctrine/Import/Mysql.php 会发现它完全满足您的需求,甚至更多。

关于mysql - 查询 MySQL information_schema 数据库是查找相关表的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/111129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com