关于mysql的问题,擅长mysql的进,拜托大神。 20C

1:mysql插入数据库表以后是按照 主键id排序的吗

2:(如果1成立)select * from table ,这句sql的执行顺序是按照id索引顺序从小到大获取到
数据表的地址,以至于查出来的顺序是按照id排序的吗。

3:如果有一个查询条件name(无索引),我根据name去查询 扫描的顺序是按照id从小到大吗,查出来的数据是按照id排序吗,实测是这样的。

4:如果name有索引查出来的会按照name排序,id会乱,这点是我测出来的。

7个回答

1.是的,但是当你删除某条记录了,那个id就会被删除
2是的
3是的
4是的

准确的说是按照物理存储顺序显示,当数据增删改操作之后就不一定按照主键ID来排序,myiasm是这样的,INNODB会按照主键来排序,如果select使用到了索引,就按照索引来排序,所以不能信赖默认排序,要想按照你的想法排序就一定要加上order by

1.mysql插入记录应该是按照主键排序的,你的主键应该是int类型,varchar排序会不准确的;类型要对。
2.select * from table 查询出来的结果是按照id排序的,也可以说是按照你插入的顺序排序的。查询结果是一样的。
delete 删除的时候不会释放空间,truncate删除会释放空间,新插入的id是连续的。
3.Mysql有两种操作可以用来生成有序结果:
(1)排序操作: 将查找出来的结果使用排序算法进行排序
(2)按索引顺序扫描: ORDER BY语句后跟着一个被索引的列,如此一来索引的顺序就是索引对应记录的顺序,这样直接顺着索引一直往下读取记录即可得到有序的结果。
我的存储引擎是inooDB,希望可以帮到你~

1.默认是按id升序排序的,因为主键是一种唯一索引,也是会自动排序的,一般id主键推荐是增长的整型(id自增或业务逻辑控制等);
2.同1点,默认是按id升序排序的
3.如果没有建索引,那么会导致全表扫描,是按照id升序扫描的
4.索引的功能有2点,一个是筛选,一个排序,所以会先去检测where条件中的索引顺序,其实没有建索引默认是去检测id的索引顺序的。

我们开发的时候有些时候为了提高SQL的运行效率,会加上索引,我知道的就是索引会对排序的速度有影响。如果加入的索引合理的话会提高SQL的效率。具体的也不是很懂。建议楼主看一下这篇文章吧.https://www.cnblogs.com/wangxusummer/p/5329813.html

我知道 会按照 主键id排序,但是我想知道的是 为什么 他会按照 这个排序,是因为 插入的时候 根据聚簇索引 然后按照指定顺序插入 表中的页(page)
,所以导致页的数据是 按照顺序的吗,那么查询的时候 是直接访问页,而不是先访问 主键索引,再根据主键中行号访问页中数据吗?

HXNLYW
小葫芦-爬坑记 我理解的是访问主键索引,每次插入、修改、删除数据,都会更新索引文件的
12 个月之前 回复
  1. 不是。mysql常见的两种引擎底层是文件,而且文件的存储是跟操作系统相关的,在磁盘中并不一定是顺序的。有序的只是索引而已。
  2. 不是。根据sql规范,如果没有order语法,数据库并不保证结果有序,innodb的两个主流版本都是如此,特别是底层有多个文件,结果数据经过合并的查询。当然,不保证有序并不是一定乱序,只是有序性不可靠而已。
  3. 不是。理由同上。
  4. 也不一定,理由同上。
  5. 如果只查询了主键(或者索引),保证的是有序(是引擎扫描索引的遍历顺序),有可能并不扫描原表,考虑到索引默认是btree,那个顺序未必就是order期望的结果。

所以,期望结果有序,最可靠的做法还是带上order语句。

HinanaiTenshi
HinanaiTenshi 回复: 不保证有序并不代表一定乱序,比如我不确定查询有跨文件的结果合并,并且返回的结果不止有主键(这样不会跳过原表)。如果有预设的具体场景,确实可以做到查询结果有序,但是sql规范提供了order语法,直接写明多好。
12 个月之前 回复
StackTc
StackTc 按照你这么说 为什么select * from table 是 按照 主键升序的呢
12 个月之前 回复
StackTc
StackTc 你确定 如果主键自增的话 页中的数据 不是 有序的?
12 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!