danieldharvey / stinky-query-finder
查找臭查询
dev-master
2017-06-02 10:12 UTC
Requires (Dev)
- phpunit/phpunit: ^6.1
This package is not auto-updated.
Last update: 2024-09-12 06:14:52 UTC
README
它做了什么?
您传递一个PDO对象和一个SQL调用给它,它会了解一些关于您数据库的信息,并确定您的查询是否可能是垃圾。
它是如何决定的?
基本上,通过以下条件:a) 表是否非常长 - 如果不是,那么它将是好的。b) 如果表很长,查询是否使用一个或多个索引来提高查询正确性的可能性。
我如何使用它?
创建一个PDO对象,将其传递给一个新的Stinkers对象,然后询问您的SQL是否是狗屎。
$dbName = "greatDB"
$dsn = "mysql:dbname={$dbName};host=127.0.0.1";
$pdo = new \PDO($dsn, "username", "excellentPassword");
$sql = "SELECT COUNT(1) FROM excellentTable WHERE thingID=2229 AND theDate='2017-05-12'";
$stinkers = new \DanielJHarvey\QueryStinkers\Stinkers($dbName, $tables, $pdo);
$problematicQuery = $stinkers->checkQuery($sql);
$problematicQuery将返回false(没有问题,很好)或一个基于数组的堆栈跟踪(以便可以定位产生问题的查询代码)
这不会慢一些吗?
是的,很遗憾,所以请不要在生产环境中使用它。如果您希望加快速度,可以像这样缓存Stinkers创建的数据库表数据
$tables = $stinkers->getTables();
cacheTablesDataWithYourExcellentCachingSolution($tables);
然后您就可以像这样再次使用它了
$dbName="excellentDB"
$tables = getCachedTablesFromYourGreatCachingFunction();
$stinkers = new \DanielJHarvey\QueryStinkers\Stinkers($dbName, $tables);
// no need to rebuild table data, everything is fine