请问,检索的时候,是用userid快呢,还是用email快? 一个表,有userid(int型)、email(varchar型)email加了索引请问,检索的时候,是用userid快呢,还是用email快?数据库是mysql5.1 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 具体的看一下explain select userid,email from where table1; 补充一下啊,userid是主键email是非空的,有唯一约束 当然是userid主键快 email是先要搜到这行数据主键userid的值 再用userid去搜索数据 可是email加了索引了啊。加了索引还是要先要搜到这行数据主键userid的值 再用userid去搜索数据吗?我听说如果是oracle的话,int的主键userid检索不如加了索引的email快,因为如果没建索引走全表扫描。 主要是看你的查询语句是怎么样的。唯一约束email 加上索引 比主键慢不了多少 SELECT * FROM empuser WHERE user_id=#user_id#; 你这个语句就是通过主键来检索的嘛 email 加上索引也不会对它产生什么样子的影响 对dml操作会有一定的影响要是你的程序里面有这样的查询:SELECT * FROM empuser WHERE email = XXX那么它用到的就是 email 上加的索引。如果你要检索出来的数据大于总数据量的30%左右 理论上说,全表扫描比索引检索的效率要高 我现在就是在SELECT * FROM empuser WHERE user_id=#user_id#;和SELECT * FROM empuser WHERE email=#email#;之间难以取舍!检索出来就一条数据。 理论上是一样快。但细节上还是要看表的存储引擎是什么? 如果是INNODB,则主键会快一点儿。如果是MYISAM的则应该相同。 大侠又过来帮忙了,再次感谢,以前帮我n次了。建表时,定义的engine=innodb这么讲还是主键快了。 是这样的 引擎是INNODB的话 主键是直接定位记录的物理位置的 其他的索引都是指向主键索引。查询效率来说相差也不大的,查询时间是相同数量级的。 着个需要参考的有点多,看你的SQL 怎么利用索引,也看你的查询需求,可能需求不会用到其中的任何一个索引,同时与存储引擎有一定关系,比如选择innodb,那样会相对于其他迎亲快点,可以参考下索引的实现原理1 年末交流, mysql cluster如何支持海量数据索引 mysql存储过程实现自动插入海量数据?(大家热情探讨!) 请问一下如何判断一个字段是否存在 text类型的数据太长导致update这个字段发生错误 数据库用户表设计问题 苍天啊,为什么会出现这种问题~~~@_@ 请问这种写入mysql数据库是采用什么技术? select for update 如何查询字段中多行数据的首列? 关于mysql in 子查询优化问题 单表超过2G,查询结果约800W条的效率问题 求助大量数据插入MySQL
email是非空的,有唯一约束
我听说如果是oracle的话,int的主键userid检索不如加了索引的email快,因为如果没建索引走全表扫描。
唯一约束email 加上索引 比主键慢不了多少
email 加上索引也不会对它产生什么样子的影响 对dml操作会有一定的影响
要是你的程序里面有这样的查询:
SELECT * FROM empuser WHERE email = XXX
那么它用到的就是 email 上加的索引。如果你要检索出来的数据大于总数据量的30%左右 理论上说,全表扫描比索引检索的效率要高
SELECT * FROM empuser WHERE user_id=#user_id#;
和
SELECT * FROM empuser WHERE email=#email#;
之间难以取舍!
检索出来就一条数据。
理论上是一样快。但细节上还是要看表的存储引擎是什么? 如果是INNODB,则主键会快一点儿。如果是MYISAM的则应该相同。
建表时,定义的engine=innodb
这么讲还是主键快了。
其他的索引都是指向主键索引。查询效率来说相差也不大的,查询时间是相同数量级的。
同时与存储引擎有一定关系,比如选择innodb,那样会相对于其他迎亲快点,可以参考下索引的实现原理1