【发布时间】:2013-09-06 14:23:45
【问题描述】:
这是我的查询:
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 托管
EXPLAIN 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
显示创建表事务:
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 托管)
【问题讨论】:
-
是的,这绝对不正常,不,你不应该弄乱 mysql.* 数据库中的表结构。这是 mysql 几乎所有功能都使用的内部数据库。如果您开始做任何事情但从那里选择数据,您可以完全使用您的设置。打开你的慢查询日志,开始追踪为什么这么简单的查询要花很长时间。
-
你能告诉我们
show create table....和explain select ..... -
information_schema.columns 有多少行?即
SELECT Count(*) ... -
根据this,在
WHERE中添加TABLE_SCHEMA可能会有所帮助。 -
Database Administrators 可能更适合此类数据库问题。
标签: mysql