不管你信不信 反正我是信了。。
主键索引与二级索引区别
主键索引即唯一索引,表中可以确定唯一值的字段。二级索引为非聚簇索引,也就是除了主键之外的列,都可以创建为二级索引。
主键索引 通常是 PRIMARY KEY
为什么二级索引查询比主键索引快
在 InnoDB 存储引擎中count(*) 函数是先从内存中读取数据到内存缓冲区然后进行扫描获得行记录数。InnoDB 会优先走二级索引若无会走主键索引。导致耗时较长。
在没有二级索引的情况下 select count(*) 会走主键索引缓存整表数据到缓冲区。如果存在二级索引只需要读取索引页到缓冲区查询速度显著提高几百倍。
没有创建二级索引之前
5246979的数据量 count(*)执行了有几分钟
创建了二级索引之后
不到一秒好么,兼职不要太快!爽~
count(*)、count(1)、count(0)、count(列名)用哪个?
推荐使用count(*)
在阿里规范中:
【强制】不要使用 count(列名)或 count(常量)来替代 count( * ) count( * )是 SQL92 定义的标准统计行数的语法跟数据库无关,跟 NULL 和非 NULL 无关。 说明count(*)会统计值为 NULL 的行。而count(列名)不会统计此列为 NULL 值的行。
【强制】count(distinct col) 计算该列除 NULL 之外的不重复行数注意 count(distinct col1, col2) 如果其中一列全为 NULL那么即使另一列有不同的值也返回为 0。
【强制】当某一列的值全是 NULL时count(col)的返回结果为 0但 sum(col)的返回结果为NULL。