来自INFORMATION_SCHEMA.COLUMNS的MySQL SELECT> 1分钟

时间:2013-09-06 14:23:46

标签: mysql

这是我的疑问:

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托管)

2 个答案:

答案 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的内部,因此它应该会获得更好的性能。