"select id as sum from manager where account ='kaka';id 是主键
1。查询条件where 中的 account的字段 不是 该表索引的话,那么该查询的详细执行步骤是什么样子的?
2。查询条件where 中的 account的字段 是 该表索引的话,那么该查询的详细执行步骤是什么样子的?
CREATE TABLE `session` (
`id` varchar(20) NOT NULL default '',
`appname` mediumtext,
`username` mediumtext,
`starttime` int(11) default NULL,
`endtime` int(11) default NULL,
`clientIP` mediumtext,
`serverIP` mediumtext,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;3。此session表一天下来2000条记录。几年下来,数据量也很大,现在查询很慢。一般是基于查询条件是时间段的查询较多。一般一条session的Starttime与endtime之间的时间差在24小时之内,也有大于24小时的。我现在想在这个session表加索引,
怎么加好?大家提提建议
全表扫描,一条一条记录比过去。2。查询条件where 中的 account的字段 是 该表索引的话,那么该查询的详细执行步骤是什么样子的?
MYSQL先去索引文件中找到这个索引项,然后再通过索引文件中的物理指针到数据文件中读出记录
怎么加好?大家提提建议
一天2000不算多吧。十年才不过2000*10*365 = 7,300,000具体怎么加索引,要看你的查询语句是什么了。
id 是主键
1。查询条件where 中的 account的字段 不是 该表索引的话,那么该查询的详细执行步骤是什么样子的?
全表扫描(一行一行的扫描,然后检索出account ='kaka'的id)
2。查询条件where 中的 account的字段 是 该表索引的话,那么该查询的详细执行步骤是什么样子的?
扫描索引
myisam类型的先读取索引,通过匹配的索引读取对应的行号,然后通过行号读取行取id
innodb类型的直接读取索引,返回匹配的id(innodb聚集索引包括主键)
问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧)
===>
没有索引 只能进行表扫描,一条一条比下去2。查询条件where 中的 account的字段 是 该表索引的话,那么该查询的详细执行步骤是什么样子的?
===》
有索引 如果'kaka'这个记录在总记录中分布密度小 那是可以用到索引的 但是如果密度很大 mysql会选择表扫描3。此session表一天下来2000条记录。几年下来,数据量也很大,现在查询很慢。一般是基于查询条件是时间段的查询较多。一般一条session的Starttime与endtime之间的时间差在24小时之内,也有大于24小时的。我现在想在这个session表加索引,
怎么加好?大家提提建议
===》
在 Starttime与endtime上 加索引。。
索引一般加在联接字段上 或者 where的条件列上 如果数据量太大 可以考虑分区
select ....from session where MID(REPLACE(FROM_UNIXTIME(endtime),'-',''),1,8)<=20101231 and MID(REPLACE(FROM_UNIXTIME(starttime),'-',''),1,8)>= 20100101 例如这是一年的
所以建了等于没见