2 fanfusuzi2008123 fanfusuzi2008123 于 2015.06.10 22:16 提问

主键和索引哪个查询效率更快??

1.有次面试被问到,主键和索引哪个查询更快?
有没有哪个高手,能给详细解释下。。。在网上查了下,很多都只是给解释一统,簇聚索引和非簇聚索引,但没有特别明确给出答案。
2.还有个问题是,如果在sql语句使用了函数,还能否给字段建立索引。。
求大侠赐教!

4个回答

gamefinity
gamefinity   Rxr 2015.06.11 05:38

1.1. 主键和索引都有很多种实现方式,对于同一种实现方式来说,速度是一样的
1.2. 主键通常使用聚簇索引。可以认为聚簇索引是一种Hash索引,因此是比较快的
2.用了函数能否建索引?当然是可以的。使用函数作为条件的查询能否用到索引?应该是用不到

caozhy
caozhy   Ds   Rxr 2015.06.10 22:30

(1)主键都是加上索引的。主键的索引是唯一索引,不同的数据库可能不同,有些会有非簇聚索引
(2)当然可以,定义了索引不一定在查询中使用索引,最坏的情况是相当于索引不存在

frank_20080215
frank_20080215   2015.06.11 07:57

主键查询效率比索引更快。因为索引有很多种,不能保证都是唯一的。主键必须是唯一的

edouardzyc
edouardzyc   2015.06.11 09:23

创建主键的时候会创建唯一索引,查询的时候是索引起到了优化的作用
使用了函数会导致已经创建的索引失效

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
mysql中char与varchar的区别 哪种字段的查找效率高
在mySQL 中char 和 varchar 都是存储字符串的,区别在于char有固定的长度,而varchar属于可变长的字符类型。char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1
sql多表查询效率提升实战
建索引,下面是我的性能对比:我的SQL语句为,多表查询,查询600多个 select count(*) from wp_ccnu_user,wp_ccnu_student where wp_ccnu_user.studentid=wp_ccnu_student.studentid and wp_ccnu_user.grade=2016 建索引很简单,我们只需打开navicat,点击选中的表格,
MySQL 5.7主键查找结果—真的很快嘛?
这篇博客测试MySQL5.7的主键查询结果并确定MySQL5.7是不是真的比之前的版本查询的更快。   前段时间MySQL5.7刚刚发布,现在尘埃落定,是时候来测试一下它在性能上面的提升了。   我可不是仅仅为了满足自己的好奇心才做的这些测试!许多还在使用MySQL5.6(甚至是MySQL5.5)的用户经常问升级到5.7能获得多少的性能提升呢? 或者它会不会反而降低性能呢,特别是当Pe
mysql分别用数字INT和中文varchar做索引查询效率上差多少
性能相当,mysql中区别性能的是采用哪种索引方式,而不是索引的数据类型。MySQL的btree索引和hash索引的区别hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像btree(B-Tree)索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 hash 索引的查询效率要远高于 btree(B-Tree) 索引。虽然 hash 索引效率高,但是 has...
mysql 普通索引 唯一索引的创建与效率比较
unique(唯一索引) alter table `table_name` add unique (`column`)  index(普通索引) mysql教程>alter table `table_name` add index index_name ( `column` )  fulltext(全文索引) alter table `table_
普通索引和唯一索引的区别、性能差异,以及其他索引简介
今天在我的虚拟机中布置了环境,测试抓图如下: 抓的这几个都是第一次执行的,刷了几次后,取平均值,效率大致相同,而且如果在一个列上同时建唯一索引和普通索引的话,mysql会自动选择唯一索引。 谷歌一下: 唯一索引和普通索引使用的结构都是B-tree,执行时间复杂度都是O(log n)。 1、普通索引     普通索引(由关键字KEY或INDEX定义的索引)
数据库建立索引为什么会加快查询速度
首先明白为什么索引会增加速度,DB在执行一条Sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度。     添加索引的话,首先去索引列表中查询,而我们的索引列表是B类树的数据结构,查询的时间复杂度为O(log2N),定位到特定值得行
oracle提高查询效率的34种方法
原文链接:http://www.2cto.com/database/201301/181269.html 1、选择最有效率的表名顺序   (只在基于规则的优化器中有效):   ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作
B-tree 索引提高 MySQL 查询效率的原理
在MySQL中,我们常用的存储引擎 InnoDB 和 MyISAM 的索引都是B-Tree 索引。大家都知道,建立索引的目的便是优化慢查询,那么慢查询究竟慢在哪里呢? 查询时间 一个sql查询的时间分为 等待时间 和执行时间。 等待时间,即sql执行之前所等待的时间。对于mysql数据库来说,在执行某些操作时,InnoDB会锁行,MyISAM会锁表。当即将开始一个新查询时,如果查询所操作的
数据库主键int型和str型效率比较
 又看到这样的一段话: 主键用整型会极大的提高查询效率,而字符型的比较开销要比整型的比较开销大很多,用字符型数据作主键会使数据插入、更新与查询的效率降低。数据量小的时候这点降低可能不会被注意,可是当数据量大的时候,小的改进也能够提高系统的响应速度。 我做了一个实验,用MSSQL企业管理器建立两张表TInt和TStr, TInt {  intId  int  PRIMARY KEY  i