MySQL慢查询

时间:2011-05-26 15:36:29

标签: mysql

我有一张包含6098369条记录的表格并且正在增长。 查询真的很慢,我想知道你是否对我的情况有任何提示。

这是create table语句:

CREATE TABLE  `sametime`.`message` (
  `messageID` int(100) unsigned NOT NULL AUTO_INCREMENT,
  `timestamp` datetime DEFAULT NULL,
  `userFrom` varchar(80) DEFAULT NULL,
  `userTo` varchar(80) DEFAULT NULL,
  `msg` varchar(65000) DEFAULT NULL,
  `conversationID` int(100) DEFAULT NULL,
  PRIMARY KEY (`messageID`),
  KEY `userFromIndex` (`userFrom`(5)),
  KEY `userToIndex` (`userTo`(5)),
  KEY `timestampIndex` (`timestamp`)
) ENGINE=InnoDB AUTO_INCREMENT=6098370 DEFAULT CHARSET=latin1;

正如你所看到的,我已经添加了索引,希望能够正常工作。

任何提示?

4 个答案:

答案 0 :(得分:4)

如果没有看到你的select语句,很明显在VARCHAR用户名上搜索这个表要比在整数索引字段上搜索要慢得多。 您应该考虑将用户名移动到单独的表中,并在此表中使用userNo外键。

另外,对话ID没有索引?这不是一个关键的查找字段吗?

除了ceejayoz提到的那样,MySQL的EXPLAIN语句应该是你的第一个途径。

答案 1 :(得分:1)

没有看到缓慢的实际查询...

尝试使用UserFrom,TimestampUserTo,Timestamp上的compound index

答案 2 :(得分:1)

没有特定的查询和EXPLAIN输出可以说不多。但是我会将msgVARCHAR(650000更改为TEXT,因为MySQL会将每个行放入内存中,因此会分配整个65000字节。

另外我很好奇 - 为什么你使用INT(100)?它不允许您在2^100中存储2^32值,只需INT作为常规INT(100)。 {{1}}仅在显示选项AFAIR中有所不同。

答案 3 :(得分:0)

嗯,我想我弄明白了我的主要问题。它很慢的主要原因是我没有将conversationID设置为外键。我还对表设计提出了其他建议。 感谢您的回复