【发布时间】:2016-10-19 02:56:10
【问题描述】:
我有一个大约有一亿行的表,列 'id' 是主键,它是表中唯一的键。
我做了如下查询:
SELECT id,name FROM table WHERE id IN (id1, id2, id3, id4, ..., id1000);
“IN”中的这 1000 个 id 实际上是由程序预先计算的 const 整数。
但是 Mysql 每次查询大约需要一分钟。它并不慢,但速度非常慢。条款有什么问题?非常感谢!
表定义:
CREATE TABLE mytable
(
id mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
catid smallint(5) unsigned NOT NULL DEFAULT '0',
name char(39) NOT NULL,
originalname varchar(255) NOT NULL,
thumb varchar(255) NOT NULL DEFAULT '',
description varchar(255) NOT NULL DEFAULT '',
status tinyint(2) unsigned NOT NULL DEFAULT '1',
creationtime int(11) unsigned NOT NULL DEFAULT '0',
updatetime int(11) unsigned NOT NULL DEFAULT '0',
score int(11) unsigned NOT NULL
PRIMARY KEY (id)
)
ENGINE=MyISAM
AUTO_INCREMENT=13074618
DEFAULT CHARSET=utf8
【问题讨论】:
-
show create table theTableName说什么,edit -
选项 1:您缺少可用索引
-
选项 2:表的工作集不适合内存并且必须从磁盘获取(最多 1000 次)
-
选项 3:您正在使用一个 myisam 表,其中有很多写入(或一些大的慢速写入)会锁定读者
-
CREATE TABLE
mytable(idmediumint(8) unsigned NOT NULL AUTO_INCREMENT,catidsmallint(5) unsigned NOT NULL DEFAULT '0',namechar(39) NOT NULL ,originalnamevarchar(255) NOT NULL,thumbvarchar(255) NOT NULL DEFAULT '',descriptionvarchar(255) NOT NULL DEFAULT '',statustinyint(2) unsigned NOT NULL DEFAULT '1 ',creationtimeint(11) unsigned NOT NULL DEFAULT '0',updatetimeint(11) unsigned NOT NULL DEFAULT '0',scoreint(11) unsigned NOT NULL PRIMARY KEY (id) ENGINE=MyISAM AUTO_INCREMENT=13074618 默认字符集=utf8 |
标签: mysql where-clause