如何解决MySQL慢查询
|| 我有一张桌子,上面有6098369条记录,并且还在增长。 查询真的很慢,我想知道您是否对我的情况有任何建议。 这是创建表语句: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;
如您所见,我已经添加了索引,希望它能起作用。
有小费吗?
解决方法
在没有看到您的select语句的情况下,很明显,在VARCHAR用户名上搜索此表比在整数索引字段上搜索要慢得多。
您应该考虑将用户名移到单独的表中,并在该表中使用userNo外键。
另外,在sessionID上没有索引吗?那不是关键的查询字段吗?
除了ceejayoz提到的以外,MySQL的EXPLAIN语句应该是您的第一个途径。
,没有看到缓慢的实际查询...
尝试对
UserFrom,Timestamp
和UserTo,Timestamp
使用复合索引。
,如果没有特定的查询和EXPLAIN输出,则无法说太多。但是,我会将msg
从ѭ4to更改为TEXT
,因为对于MySQL放入内存的每一行,总分配了65000个字节。
我也很好奇-为什么您使用INT(100)
?它不允许您在其中存储2^100
值,就像常规INT
一样仅存储2^32
。 INT(100)
仅在显示选项AFAIR上有所不同。
,好吧,我想我已经弄清楚了我的主要问题。速度慢的主要原因是我没有将sessionID设置为外键。我还采纳了有关桌子设计的其他建议。
感谢您的回应
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。