【发布时间】:2014-04-10 06:55:59
【问题描述】:
我有一个大型实时数据库,其中大约 1000 个用户每分钟更新 2 个或更多更新。同时有 4 个用户正在获取报告并添加新项目。到目前为止,主要的 2 个表包含大约 200 万和 400 万行。
使用这些表的查询花费了太多时间,即使是简单的查询,例如:
"SELECT COUNT(*) FROM MyItemsTable" and "SELECT COUNT(*) FROM MyTransactionsTable"
需要 10 秒和 26 秒
大型报告现在需要 15 分钟!!!时间太长了。
我使用的所有表都是innodb
在我阅读声誉之前有什么办法可以解决这个问题??
提前感谢您的任何帮助
编辑 这是MyItemsTable的结构和索引:
CREATE TABLE `pos_MyItemsTable` (
`itemid` bigint(15) NOT NULL,
`uploadid` bigint(15) NOT NULL,
`itemtypeid` bigint(15) NOT NULL,
`statusid` int(1) NOT NULL,
`uniqueid` varchar(10) DEFAULT NULL,
`referencenb` varchar(30) DEFAULT NULL,
`serialnb` varchar(25) DEFAULT NULL,
`code` varchar(50) DEFAULT NULL,
`user` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`pass` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`expirydate` date DEFAULT NULL,
`userid` bigint(15) DEFAULT NULL,
`insertdate` datetime DEFAULT NULL,
`updateuser` bigint(15) DEFAULT NULL,
`updatedate` datetime DEFAULT NULL,
`counternb` int(1) DEFAULT '0',
PRIMARY KEY (`itemid`),
UNIQUE KEY `referencenb_unique` (`referencenb`),
KEY `MyItemsTable_r04` (`itemtypeid`),
KEY `MyItemsTable_r05` (`uploadid`),
KEY `FK_MyItemsTable` (`statusid`),
KEY `ind_MyItemsTable_serialnb` (`serialnb`),
KEY `uniqueid_key` (`uniqueid`),
KEY `ind_MyItemsTable_insertdate` (`insertdate`),
KEY `ind_MyItemsTable_counternb` (`counternb`),
CONSTRAINT `FK_MyItemsTable` FOREIGN KEY (`statusid`) REFERENCES `MyItemsTable_statuses` (`statusid`),
CONSTRAINT `MyItemsTable_r04` FOREIGN KEY (`itemtypeid`) REFERENCES `itemstypes` (`itemtypeid`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `MyItemsTable_r05` FOREIGN KEY (`uploadid`) REFERENCES `uploads` (`uploadid`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8
【问题讨论】:
-
你索引你的表了吗?
-
尝试用
(id)替换(*)。 -
呜呜!!第一个耗时 0.5 秒,第二个耗时 1.6 秒
-
@user3518239 如果您将
SELECT换成SELECT SQL_NO_CACHE,您可以在避免缓存的同时测试性能。 -
好的,非常感谢!!
标签: mysql