用select id,a,b,c,d,e from table where hits>100 and menuid=1 order by id desc limit 200的时候第一次运行速度特别慢,这个表有60多万条数据其中hits、menuid建立了索引,有什么办法让它速度快起来吗??show processlist 的时候,有很多Sending data,都是中间有hits>100 and menuid=xx的
menuid是目录的ID值,只有1、2、3、4、5、6、7、8、9、10、13、17、19这几种记录hits是记录点击数,但正常运行时并不update数据,只有压力少的时候update
menuid是目录的ID值,只有1、2、3、4、5、6、7、8、9、10、13、17、19这几种记录hits是记录点击数,但正常运行时并不update数据,只有压力少的时候update
假如你建立的是 hit、menuid聚集索引 和没有索引一样了
我们这里很多表都100万+的数据量了。速度也是有些慢,不过还可以忍受。
首先服务器最好要有1G或以上的内存。首先 id 是不是主键?如果不是,也建立索引。
limit 200 是指从第200条数据开始取,一直取完。其次,以楼主的程序,建立 menuid、hits 聚集索引 会好一些,不过,没有最终解决问题。
速度应该不会太慢。
如果很慢也是因为查出来的数据量特别大。
?
limit 200 是指从第200条数据开始取,一直取完-------------------------------------------真的?=============
错了,相当于 limit 0,20
第一次运行速度慢,当放到缓存后它才变快,但有时候紧急更新的时候,清空了缓存,整一台服务器就超慢,show processlist的时候里面就很多menuid=x的和hits>xx and menuid=x的SQL语句,表的结构:
CREATE TABLE `t1` (
`id` int(11) NOT NULL auto_increment,
a varchar(250) default NULL,
p varchar(250) default NULL,
l int(11) default '0',
q varchar(100) default NULL,
j int(11) default NULL,
r varchar(250) default NULL,
`hits` bigint(20) default '0',
s mediumtext,
t int(11) default '0',
i int(3) default '0',
u int(11) default '0',
m datetime default '0000-00-00 00:00:00',
n int(11) default '0',
v bigint(20) default '0',
k int(11) default '0',
w varchar(250) default NULL,
x varchar(250) default NULL,
y varchar(250) default NULL,
z varchar(5) default '0',
a int(10) default '0',
b varchar(250) default NULL,
c varchar(250) default NULL,
d int(3) default '0',
e varchar(250) default NULL,
f varchar(20) default NULL,
`menuid` int(3) default '0',
g varchar(250) default NULL,
h varchar(250) default NULL,
bb varchar(3) default NULL,
PRIMARY KEY (`id`),
KEY i (i),
KEY j (j),
KEY k (k),
KEY l (l),
KEY n (n),
KEY m (m),
KEY `hits` (`hits`),
KEY `menuid` (`menuid`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk
----------------------------------------
如果值不多,建议你explain一下,看看MySQL的优化方式
----+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | r
ef | rows | Extra |
+----+-------------+----------------+-------+---------------+------+---------+--
----+------+-------------+
| 1 | SIMPLE | t1 | range | hits,menuid | hits | 9 | N
ULL | 8108 | Using where |
+----+-------------+----------------+-------+---------------+------+---------+--
----+------+-------------+
1 row in set (0.03 sec)