这是我的疑问:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = "transactions"
这是花了多长时间:
Showing rows 0 - 29 ( 36 total, Query took 61.8934 sec)
我不是dba,但这不正常,是吗?我是否期望查询INFORMATION_SCHEMA应该花费一分钟?我有什么问题吗?我是否需要添加索引或其他内容才能获得正常响应?
---编辑以解决问题
版本5.5.30-30.2
此数据库由HostGator托管
EXPLECTION SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME =“transactions”
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE COLUMNS ALL NULL TABLE_NAME NULL NULL NULL Using where; Open_frm_only; Scanned 1 database
SHOW CREATE TABLE交易:
transactions CREATE TABLE `transactions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`accountId` int(11) NOT NULL DEFAULT '0',
`contractId` int(11) NOT NULL DEFAULT '0',
`insertionId` int(11) NOT NULL DEFAULT '0',
`aNetCIMProfileId` int(11) NOT NULL DEFAULT '0',
`paymentProfileId` int(11) NOT NULL DEFAULT '0',
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`wasSuccessful` tinyint(1) NOT NULL DEFAULT '0',
`amount` int(11) NOT NULL DEFAULT '0',
`resultText` varchar(255) NOT NULL,
`authNetTransactionId` bigint(20) NOT NULL DEFAULT '0',
`isChargedBack` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=latin1
SELECT Count( * )
FROM INFORMATION_SCHEMA.COLUMNS
[这也是> 1分钟]
1303
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = "transactions"
AND TABLE_SCHEMA = 'mydbname'
响应时间相同
SET global innodb_stats_on_metadata = 0;
#1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation
(此数据库由HostGator托管)
答案 0 :(得分:1)
SELECT COLUMN_NAME,TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME like "%transactions%"
AND TABLE_SCHEMA = 'mydbname'
TABLE_SCHEMA中的提供数据库名称mydbname。 在共享主机上,如果您有访问权限则会花费更多时间,然后它会显示结果。
答案 1 :(得分:0)
如果你有很多数据库和表,那么INFORMATION_SCHEMA很长一段时间以来都会有很糟糕的表现。
MySQL提高了每个主要版本中I_S的性能,因此您需要尽可能多地升级到当前版本。
您还应该设置服务器选项innodb_stats_on_metadata=0
,这将有所帮助。当您查询I_S时,它可以降低统计信息收集的成本。在MySQL 5.6.6及更高版本中,默认为0。
在MySQL 8.0中,他们完全重新设计了I_S的内部,因此它应该会获得更好的性能。