请问,检索的时候,是用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 自动增长数字列 怎么会自动失效 Mysql sql语句优化 请教一个关于mysql数据库优化的问题 mysql分布式存储求教 我查询出一个数字!如何取整数 紧急求助关于postgresql的问题,系统给出一个警告很烦人。都过来看看好吗,谢谢 Access向Mysql转换的问题(急在线等!!!) 哪里可以找到 script mysql_fix_privilege_tables? mysql if() 和 case when then end的使用问题 mysql多库数据汇总 单表超过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