mysql--索引详解

MySQL中索引详解 除聚簇索引之外的所有索引都称为辅助索引。在中InnoDB,辅助索引中的叶子节点存储的数据是该行的主键值都。在检索时,InnoDB使用此主键值在聚簇索引中搜索行记录。这里以user_innodb为例,user_innodb的id列为主键,age列为普通索引。 阅读详情

前言
如果是小白的话,我觉得看到这篇文章一定会对博主赞赏有加,因为实在是太好了,没错,博主就是要让你喜欢上。

1、索引
索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据。对于索引,会保存在额外的文件中。
2、索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构。类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可。

1.1、索引选取类型
1、越小的数据类型通常更好:越小的数据类型通常在磁盘、内存和CPU缓存中都需要更少的空间,处理起来更快。

2、简单的数据类型更好:整型数据比起字符,处理开销更小,因为字符串的比较更复杂。

3、尽量避免NULL:应该指定列为NOT nuLL,在MySQL中, 含有空值的列很难进行查询优化,因为它们使得索引、索引的统计信息以及比较运算更加复杂

1.2、什么场景不适合创建索引
第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因 为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。
第二,对于那 些只有很少数据值的列也不应该增加索引。因为本来结果集合就是相当于全表查询了,所以没有必要。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比 例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。
第三,对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。
第四,当修改性能远远大于检索性能时,不应该创建索 引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因 此,当修改性能远远大于检索性能时,不应该创建索引。
第五,不会出现在where条件中的字段不该建立索引。
1.3、什么样的字段适合创建索引

1、表的主键、外键必须有索引;外键是唯一的,而且经常会用来查询 
2、数据量超过300的表应该有索引;
3、经常与其他表进行连接的表,在连接字段上应该建立索引;经常连接查询,需要有索引 
4、经常出现在Where子句中的字段,加快判断速度,特别是大表的字段,应该建立索引,建立索引,一般用在select ……where f1 and f2 ,我们在f1或者f2上建立索引是没用的。只有两个使用联合索引才能有用
5、经常用到排序的列上,因为索引已经排序。
6、经常用在范围内搜索的列上创建索引,因为索引已经排序了,其指定的范围是连续的

2、索引优缺点
2.1、优点
索引由数据库中一列或多列组合而成,其作用是提高对表中数据的查询速度
索引的优点是可以提高检索数据的速度

2.2、缺点
索引的缺点是创建和维护索引需要耗费时间<br/**>
索引可以提高查询速度,会减慢写入速度

索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。

3、索引分类
1,普通索引:
仅加速查询 最基本的索引,没有任何限制,是我们大多数情况下使用到的索引。

CREATE INDEX  index_name  on user_info(name)  ;


2,唯一索引:
与普通索引类型,不同的是:加速查询 + 列值唯一(可以有null)

CREATE UNIQUE INDEX  mail  on user_info(name)  ;


3,全文索引:
全文索引(FULLTEXT)仅可以适用于MyISAM引擎的数据表;作用于CHAR、VARCHAR、TEXT数据类型的列。
4,组合索引:
将几个列作为一条索引进行检索,使用最左匹配原则。
1、普通索引
1.1.1、创建表的时候同事创建索引

create table healerjean (
  id   bigint(20)  NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT  '主键',
  name  VARCHAR(32) NOT NULL COMMENT '姓名',
  email VARCHAR(64) NOT NULL COMMENT  '邮箱',
  message text DEFAULT  NULL COMMENT '个人信息',
  INDEX index_name (name) COMMENT '索引name'
) COMMENT  = '索引测试表';


1.1.2、在存在的表上创建索引

create index index_name on healerjean(name)


1.1.3、注意:
对于创建索引时如果是blob 和 text 类型,必须指定length。

create index ix_extra on in1(message(200));

alter table employee add index emp_name (name);


1.2、删除索引

drop index_name on healerjean;

alter TABLE users  drop index  name_index ;


1.3、查看索引
这个时候,我们会发现其实主键id也是一个索引

show index from healerjean;


2、主键索引 (我们一般都会提供主键的,默认主键就是索引)
3、正确使用索引
文章相当出色,请查看。主要是看explain 中出现的row有有多少行,行数越多,表示执行速度越慢

https://www.cnblogs.com/Cheney222/articles/5876382.html

如果以错误的方式使用,则即使建立索引也会不奏效。
3.1、对于创建的多列索引,只要查询的条件中用到了最左边的列,索引一般就会被使用
1、首先按 company_id,moneys 的顺序创建一个复合索引,具体如下:

mysql> create index ind_sales2_companyid_moneys on sales2(company_id,moneys);
Query OK, 1000 rows affected (0.03 sec)
Records: 1000 Duplicates: 0 Warnings: 0

 
2、然后按 company_id 进行表查询,具体如下:

mysql> explain select * from sales2 where company_id = 2006\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: sales2
type: ref
possible_keys: ind_sales2_companyid_moneys
208key: ind_sales2_companyid_moneys
key_len: 5
ref: const
rows: 1
Extra: Using where
1 row in set (0.00 sec)


3、可以发现即便 where 条件中不是用的 company_id 与 moneys 的组合条件,索引仍然能用到,这就是索引的前缀特性。

4、但是如果只按 moneys 条件查询表,那么索引就不会被用到,具体如下:

mysql> explain select * from sales2 where moneys = 1\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: sales2
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 1000
Extra: Using where
1 row in set (0.00 sec)


3.2、对于使用 like 的查询,后面如果是常量并且只有%号不在第一个字符,索引才可能会被使用:
1、 可以发现第一个例子没有使用索引,而第二例子就能够使用索引,
2、 区别就在于“%”的位置不同,前者把“%”放到第一位就不能用到索引,而后者没有放到第一位就使用了索引。

mysql> explain select * from company2 where name like '%3'\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: company2
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 1000
Extra: Using where
1 row in set (0.00 sec)
mysql> explain select * from company2 where name like '3%'\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: company2
type: range
209possible_keys: ind_company2_name
key: ind_company2_name
key_len: 11
ref: NULL
rows: 103
Extra: Using where
1 row in set (0.00 sec)


3.3、如果列名,记得是列的名字,是索引,使用 column_name is null 将使用索引。

mysql> explain select * from company2 where name is null\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: company2
type: ref
possible_keys: ind_company2_name
key: ind_company2_name
key_len: 11
ref: const
rows: 1
Extra: Using where
1 row in set (0.00 sec)


3.4、如果对大的文本进行搜索,使用全文索引而不用使用 like ‘%…%’。
4、存在索引,但是不使用
4.1、如果 MySQL 估计使用索引比全表扫描更慢,则不使用索引。例如,如果列key_part1 均匀分布在 1 和 100 之间,下列查询中使用索引就不是很好:

SELECT * FROM table_name where key_part1 > 1 and key_part1 < 90;


4.2、如果使用 MEMORY/HEAP 表并且 where 条件中不使用“=”进行索引列,那么不会用到索引。heap 表只有在“=”的条件下才会使用索引。
4.3、用 or 分割开的条件,如果 or 前的条件中的列有索引,而后面的列中没有索引,那么涉及到的索引都不会被用到,例如:,必须or前后都有索引才能被使用,而且必须是单独索引。

mysql> show index from sales\G;
*************************** 1. row ***************************
Table: sales
Non_unique: 1
Key_name: ind_sales_year
Seq_in_index: 1
Column_name: year
210Collation: A
Cardinality: NULL
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
1 row in set (0.00 sec)


4.4、如果列是字符型,,传入的是数字,则不上‘’不会使用索引

mysql> explain select * from company2 where name = 294\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: company2
type: ALL
possible_keys: ind_company2_name
key: NULL
key_len: NULL
ref: NULL
rows: 1000
Extra: Using where
1 row in set (0.00 sec)

 

mysql> explain select * from company2 where name = '294'\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: company2
type: ref
possible_keys: ind_company2_name
key: ind_company2_name
key_len: 23
ref: const
rows: 1
Extra: Using where
1 row in set (0.00 sec)


5、联合索引和单列索引测试
https://blog.youkuaiyun.com/Abysscarry/article/details/80792876

5.1、联合索引
解释 :可以通过key_len的长度来判断联合索引使用到了那些

CREATE TABLE `d001_index` (
    `id` bigint(16) unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(128) DEFAULT NULL,
    `age` bigint(20) DEFAULT '0',
    `country` varchar(50) DEFAULT NULL,
    `a` int(11) DEFAULT '0',
    `b` int(11) DEFAULT '0',
    `c` int(11) DEFAULT '0',
    `d` int(11) DEFAULT '0',
    PRIMARY KEY (`id`),
    KEY `idx_a_b_c_d` (`a`,`b`,`c`,`d`),
    KEY `idx_age` (`age`),
    KEY `idx_name` (`name`)
)

INSERT INTO `hlj-mysql`.d001_index (id, name, age, country, a, b, c, d) VALUES (1, 'zhangyj', 25, 'chine', 1, 2, 3, 4);
INSERT INTO `hlj-mysql`.d001_index (id, name, age, country, a, b, c, d) VALUES (2, 'healerjean', 24, 'china', 2, 3, 4, 5);
INSERT INTO `hlj-mysql`.d001_index (id, name, age, country, a, b, c, d) VALUES (3, 'n', 22, 'a', 2, 4, 5, 6);
INSERT INTO `hlj-mysql`.d001_index (id, name, age, country, a, b, c, d) VALUES (4, 'k', 2, 'b', 3, 5, 6, 8);
INSERT INTO `hlj-mysql`.d001_index ( name, age, country, a, b, c, d) VALUES ( 'zhangyj', 25, 'chine', 1, 2, 3, 4);
INSERT INTO `hlj-mysql`.d001_index ( name, age, country, a, b, c, d) VALUES ( 'healerjean', 24, 'china', 2, 3, 4, 5);
INSERT INTO `hlj-mysql`.d001_index ( name, age, country, a, b, c, d) VALUES ( 'n', 22, 'a', 2, 4, 5, 6);
INSERT INTO `hlj-mysql`.d001_index ( name, age, country, a, b, c, d) VALUES ( 'k', 2, 'b', 3, 5, 6, 8);


5.1.1、查询条件为a :用到了索引a (长度为5)
 

explain  SELECT * from d001_index WHERE a = 1 ;


id    select_type    table    partitions    type    possible_keys    key    key_len    ref    rows    filtered    Extra
1    SIMPLE    d001_index    NULL    ref    idx_a_b_c_d    idx_a_b_c_d    5    const    1    100    NULL


5.1.2、查询条件为b:未用到索引
 

explain  SELECT * from d001_index WHERE b = 1 ;


id    select_type    table    partitions    type    possible_keys    key    key_len    ref    rows    filtered    Extra
1    SIMPLE    d001_index    NULL    ALL    NULL    NULL    NULL    NULL    4    25    Using where


5.1.3、查询条件为c:未用到索引 (d同理)

explain  SELECT * from d001_index WHERE c = 1 ;


id    select_type    table    partitions    type    possible_keys    key    key_len    ref    rows    filtered    Extra
1    SIMPLE    d001_index    NULL    ALL    NULL    NULL    NULL    NULL    4    25    Using where


5.1.4、查询条件为 b 、 c :未用到索引

explain  SELECT * from d001_index WHERE b = 1 and c = 2 ;


id    select_type    table    partitions    type    possible_keys    key    key_len    ref    rows    filtered    Extra
1    SIMPLE    d001_index    NULL    ALL    NULL    NULL    NULL    NULL    4    25    Using where


5.1.5、 查询条件为 a 、 b:用到了联合索引 a 、b (长度为10)

explain  SELECT * from d001_index WHERE a = 1 and b = 2 ;


id    select_type    table    partitions    type    possible_keys    key    key_len    ref    rows    filtered    Extra
1    SIMPLE    d001_index    NULL    ref    idx_a_b_c_d    idx_a_b_c_d    10    const,const    1    100    NULL


5.1.6、查询条件为 a、c :用到了联合索引a (长度为5)

explain  SELECT * from d001_index WHERE a = 1 and c = 3 ;


id    select_type    table    partitions    type    possible_keys    key    key_len    ref    rows    filtered    Extra
1    SIMPLE    d001_index    NULL    ref    idx_a_b_c_d    idx_a_b_c_d    5    const    1    25    Using index condition


5.1.7、查询条件为 a 、b、c、c:用到了联合索引a b c d (长度为20)

explain  SELECT * from d001_index WHERE a = 1 and b = 2 and c = 3  and d = 4 ;


id    select_type    table    partitions    type    possible_keys    key    key_len    ref    rows    filtered    Extra
1    SIMPLE    d001_index    NULL    ref    idx_a_b_c_d    idx_a_b_c_d    20    const,const,const,const    1    100    NULL


5.1.8、查询条件为 a or b :未用到索引

explain  SELECT * from d001_index WHERE a = 1 or b = 2;


id    select_type    table    partitions    type    possible_keys    key    key_len    ref    rows    filtered    Extra
1    SIMPLE    d001_index    NULL    ALL    idx_a_b_c_d    NULL    NULL    NULL    4    50    Using where


5.1.8、精确查找联合索引总结
1、 顾名思义是最左优先,以最左边的为起点任何连续的索引都能匹配上

2、多个单列索引在多条件查询时只会生效第一个索引!所以多条件联合查询时最好建联合索引!

当创建**(a,b,c)联合索引时,相当于创建了(a)单列索引**,(a,b)联合索引以及**(a,b,c)联合索引**
想要索引生效的话,只能使用 a和a,b和a,b,c三种组合;当然,我们上面测试过,a,c组合也可以,但实际上只用到了a的索引,c并没有用到!

3、具体 使用 a b c 的顺序无关,mysql会自动优化,但是我们建议按照索引的顺序进行查询,而且尽量将筛选力度大的放到前面,其实这种也不要一定是准确的,其实真正有影响的是是否用到了索引

5.2、单列索引
5.2.1、查询条件为 name:使用到了索引 name(长度为512 = 4 * 128 + 2)

explain  SELECT * from d001_index WHERE name = 'zhangyj' ;


id    select_type    table    partitions    type    possible_keys    key    key_len    ref    rows    filtered    Extra
1    SIMPLE    d001_index    NULL    const    idx_name    idx_name    515    const    1    100    NULL


5.2.2、查询条件为 name 、 age :只使用了第一个 name索引(长度为512 = 4 * 128 + 2)
id    select_type    table    partitions    type    possible_keys    key    key_len    ref    rows    filtered    Extra
1    SIMPLE    d001_index    NULL    const    idx_name,idx_age    idx_name    515    const    1    100    NULL
5.2.3、查询条件为 name or age :两个索引都用上了 type = INDEX_MERGE 合并索引
我这里的测试失败了,应该是由于我的数据表数据量比较小的原因

5.3、联合索引范围查询
解释:范围查询使用到第几列,则联合索引该列后面的字段的不能使用索引
注意:不要取极端值测试,因为mysql优化器会通过索引查找的数量造成一定的影响,即使使用了索引,但是索引却没能生效 ,比如下的 3 变成 1 会受到影响,因为我的数据量中a最小就是 1
explain  SELECT * from d001_index WHERE a > 1  ; 没有使用索引,因为数据均匀分布在1 以上 (有1,但是和1比较了,所以也算在了里面)


id    select_type    table    partitions    type    possible_keys    key    key_len    ref    rows    filtered    Extra
1    SIMPLE    d001_index    NULL    ALL    idx_a_b_c_d    NULL    NULL    NULL    8    75    Using where
explain  SELECT * from d001_index WHERE a > 3  ; 使用到了索引


id    select_type    table    partitions    type    possible_keys    key    key_len    ref    rows    filtered    Extra
1    SIMPLE    d001_index    NULL    range    idx_a_b_c_d    idx_a_b_c_d    5    NULL    1    100    Using index condition
5.3.1、a > 3 使用了索引 a (长度为 5 )
id    select_type    table    partitions    type    possible_keys    key    key_len    ref    rows    filtered    Extra
1    SIMPLE    d001_index    NULL    range    idx_a_b_c_d    idx_a_b_c_d    5    NULL    1    100    Using index condition
5.3.2、a = 1 and b > 1 :使用了联合索引 a、b(长度为10)
explain SELECT * from d001_index WHERE a = 1 and  b > 1 ;
1
id    select_type    table    partitions    type    possible_keys    key    key_len    ref    rows    filtered    Extra
1    SIMPLE    d001_index    NULL    range    idx_a_b_c_d    idx_a_b_c_d    10    NULL    2    100    Using index condition
5.3.3、a = 5 AND b > 6 AND c = 7 :使用了联合索引 a、b(长度为10)
explain SELECT * from d001_index WHERE a = 5 AND b > 6 AND c = 7
1
id    select_type    table    partitions    type    possible_keys    key    key_len    ref    rows    filtered    Extra
1    SIMPLE    d001_index    NULL    range    idx_a_b_c_d    idx_a_b_c_d    10    NULL    1    12.5    Using index condition
网络1 、可以用到所以的情况
A>5
A=5 AND B>6
A=5 AND B=6 AND C=7
网络2、下面条件将不能用上组合索引查询:

B>5 ——查询条件不包含组合索引首列字段
B=6 AND C=7 ——查询条件不包含组合索引首列字段

网络3、下面条件将能用上部分组合索引查询:
A>5 AND B=2 ——当范围查询使用第一列,查询条件仅仅能使用第一列 A
A=5 AND B>6 AND C=2 ——范围查询使用第二列,查询条件仅仅能使用前二列    A B


5.4、联合查询 范围排序情况
注意:表中的数据量和查询的数据量会造成影响,所以我这里都普遍使用了limit 1 ,博主测试有一些结果没有写,测试失败了,应该是由于数据量的原因,
5.4.1、order by a 使用到了联合索引 a b c d 按理说应该只用到a才对,这里博主有些疑惑
explain  SELECT * from d001_index  order by  a  limit  1;

id    select_type    table    partitions    type    possible_keys    key    key_len    ref    rows    filtered    Extra
1    SIMPLE    d001_index    NULL    index    NULL    idx_a_b_c_d    20    NULL    1    100    NULL
5.4.4、order by b 未使用索引
explain  SELECT * from d001_index  order by b  limit  1;

id    select_type    table    partitions    type    possible_keys    key    key_len    ref    rows    filtered    Extra
1    SIMPLE    d001_index    NULL    ALL    NULL    NULL    NULL    NULL    8    100    Using filesort
网络1、组合索引排序的各种场景
ORDER BY A ——首列排序

A=5 ORDER BY B——第一列过滤后第二列排序

ORDER BY A DESC, B DESC——注意,此时两列以相同顺序排序

A>5 ORDER BY A——数据检索和排序都在第一列


网络2、不可以用到组合索引
ORDER BY B ——排序在索引的第二列

A>5 ORDER BY B ——范围查询在第一列,排序在第二列

A IN(1,2) ORDER BY B ——理由同上

ORDER BY A ASC, B DESC ——注意,此时两列以不同顺序排序

转载自:https://blog.youkuaiyun.com/u012954706/article/details/81241049

mysql索引详解 MySQL的存储引擎架构将查询处理与数据的存储/提取相分离 阅读详情

相关推荐

达梦数据库集群部署(主备)

达梦数据库集群部署(主备)

m0_71845127的博客 1461

mysql key idx_mysql key index区别

看似有差不多的作用,加了Key的表与建立了Index的表,都可以进行快速的数据查询。他们之间的区别在于处于不同的层面上。Key即键值,是关系模型理论中的一部份,比如有主键(Primary Key),外键(Foreign Key)等,用于数据完整性检查与唯一性约束等。而Index则处于实现层面,比如可以对表个的任意列建立索引,那么当建立索引的列处于SQL语句中的Where条件中时,就可以得到快速的数...

weixin_34569317的博客 1486

STM32F407 CubeMX UART DMA高效解析BNO085九轴数据

本文详细介绍了如何在STM32F407平台上使用CubeMX配置UART和DMA高效解析BNO085九轴传感器数据。通过DMA循环接收机制实现低CPU占用的实时数据采集,并分享数据解析技巧、错误处理及实战调试经验,为嵌入式开发者提供完整解决方案。

o4p5q6r7s的博客 234

mysql索引使用

一条慢查询日志   mysql的索引是一把双刃剑,如果使用得当,会给系统带来极大的性能提升;相反的如果使用不当,则可能会带来灾难性的后果。最可怕的是前期很难发现,随着数据量的增加以及业务高峰期的临近,问题才会突然暴露出来。   本周我所负责的一个系统就出来了类似的问题,庆幸的是处理及时,没有造成灾难性的后果。今天抽时间把事情的经过记录下来,在未来的时间里鞭策自己:对新成员必

ting4的博客 605

HFSS仿真3dB微带双分支定向耦合器学习笔记

设计一个3dB微带双分支定向耦合器,各端口微带线特性阻抗为50Ω,中心频率为5GHz,介质基板的介电常数9.6,基板厚度为0.8mm这里重点讲解HFSS的操作,关于理论知识后面文章更新。

qq_36521926的博客 7767

Mathtype公式下标深度调整技巧:解决固定行距下的显示不全问题

本文针对在Word等文档中设置固定行距时,Mathtype公式下标显示不全的问题,提供了专业解决方案。核心在于调整Mathtype软件内部的“下标深度”参数,通过修改单个公式或批量格式化全文,使公式完美适配固定行距,确保下标清晰完整,且不影响文档整体排版。

pepsi的博客 1498

mysql key idx,Mysql中key 、primary key 、unique key 与index区别

key 是数据库的物理结构,它包含两层意义和作用,一是约束(偏重于约束和规范数据库的结构完整性),二是索引(辅助查询用的)。https://www.cnblogs.com/zjfjava/p/6922494.htmlCREATE TABLE `act_ru_execution` (`ID_` varchar(64) COLLATE utf8_bin NOT NULL,`REV_` int(11) ...

weixin_28812205的博客 750

pgsql行列转换

‌是PostgreSQL中的一个函数,用于将一个字符串根据正则表达式进行分割,并将结果返回为一个表格,每个分割后的部分作为一行‌‌。string_agg() 函数是 PostgreSQL 中的一个聚合函数,用于将一个列中的值连接成一个字符串。

chimchim66的博客 3501

深入理解MySQL之SQL调优

文章目录前言一般查询优化避免全字段查询等值匹配模糊匹配分页查询优化排序分组优化关联查询优化总结 前言 结合MySQL中B+树的索引结构和Explain关键子给出的查询计划,我们就可以有针对性的对一些慢SQL进行优化,这篇博客就来总结一下优化思路。 先声明一下表结构: CREATE TABLE `s1` ( `id` INT NOT NULL AUTO_INCREMENT, `key1` VARCHAR(100), `key2` VARCHAR(100), `key3` VARCHAR(100),

从入门到脱发 479

高通Camx功能feature分析之十:高通NCS服务之注册和启动

本文介绍了高通NCS(非相机传感器)服务的注册与启动流程。NCS通过QMI接口访问陀螺仪等传感器,为相机EIS/AEC等功能提供辅助数据。文章详细解析了服务注册时的QueryCapabilites能力查询、RegisterService注册流程,以及通过StartNCSService启动服务线程的过程。重点包括:1)AF/EIS等节点通过NCSService创建传感器对象;2)注册时需校验传感器类型和接口;3)首次注册成功后会启动NCS服务线程;4)采样率变化时需重新配置会话。通过线程池管理实现传感器数据的

1261

基于单片机的智能体重秤设计与嵌入式程序实现

智能体重秤的基本功能是测量用户的体重,并将数据通过无线方式传输到终端设备(如智能手机、电脑或云平台)进行管理。体重测量:实时测量用户体重,并进行数据存储。BMI(体质指数)计算:基于体重和身高计算BMI值,帮助用户了解健康状况。多用户管理:通过蓝牙或Wi-Fi技术支持多用户体重数据记录。健康数据分析:结合历史数据分析体重变化趋势。语音播报:通过语音播报用户体重,便于老人或视力不便的人士使用。数据同步:通过App或云平台同步数据,进行长期健康监控。

2201_76125393的博客 1755

mysql索引的详解

摘要:索引是数据库用于快速查询数据的数据结构,类似字典目录。合理使用索引能提升查询速度,但会降低写入性能。创建索引需谨慎,建议单表不超过5个。适合建索引的字段包括主键、外键、高频查询字段等;不适合的包括极少查询、低区分度或大文本字段。索引分为普通、唯一、全文和组合索引,组合索引遵循最左匹配原则。使用索引时需注意查询条件顺序,避免范围查询影响索引效果。正确使用索引能显著提升性能,错误使用则可能导致索引失效。

qq_39244069的博客 79

ABAP Secure Storage 在事务码 SM59 中的应用

系统管理人员在进行维护时,应关注相关日志信息,及时发现可能出现的安全异常,并针对不同安全等级的操作制定相应的备份与恢复策略,以降低潜在风险。该区域在设计上具备高度隔离性,仅允许经过授权的组件访问。保存后,系统会将密码存储在 Secure Storage 中,这种处理方式充分体现了 SAP 标准程序在安全设计上的考量。对于系统管理员而言,这种机制在日常维护与审计中提供了有力的支持,可以通过比对存储数据的哈希值或其他完整性校验手段,及时发现异常变动,保障系统长期稳定运行。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 669

MySQL索引【详解】

文章目录第一篇 什么是索引?1、来看一个问题方案1方案2方案3方案42、索引是什么?第二篇 MySQL索引原理详解1、背景2、预备知识什么是索引?磁盘中数据的存取mysql中的页数据检索过程3、我们迫切的需求是什么?(数据结构和算法)3.1、循环遍历查找3.2、二分法查找3.3、有序数组3.4、链表单链表双向链表3.5、二叉查找树3.6、平衡二叉树(AVL树)3.7、B-树3.8、B+树3.9、Mysql的存储引擎和索引3.10、页结构数据检索过程对page的结构总结一下第三篇 MySQL索引管理1、索引分

wang_luwei的博客 7269

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Mysql 索引详解

B-Tree 索引:适用于范围查询和等值查询,采用 B+Tree 数据结构,广泛用于默认的索引。哈希索引:适用于等值查询,底层通过哈希表实现,不支持范围查询。全文索引:专门用于文本搜索,采用倒排索引,支持复杂的文本匹配。空间索引:用于存储和查询空间数据(如地理位置),采用 R-Tree 数据结构。每种索引类型的选择都应该根据具体的查询需求来决定,理解它们的底层实现有助于优化数据库性能。

qq_35082497的博客 1016

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

MySQL索引详解

索引是一种用于快速查询和检索数据的数据结构,其本质可以看成是一种排序好的数据结构。

zhaolk的博客 8888

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【MySQL】MySQL 索引详解

MySQL索引与约束概述 MySQL索引是一种特殊的数据结构,用于加速数据查询,主要包括以下几种类型: 主键索引:唯一标识记录,具有唯一性和非空特性 普通索引:基础索引类型,无约束性 唯一索引:保证数据唯一性 组合索引:多列联合索引,遵循最左匹配原则 全文索引:针对文本内容的高效分词检索 索引的作用包括加速查询、优化排序等。InnoDB表必须有主键,可通过显式设置、非空唯一索引或自动生成_rowid来实现。约束条件保证数据的完整性和一致性。

Antonio915的博客 2032

Mysql索引详解

索引可以极大的提升Mysql的数据检索速度,类似于书籍的目录,可以根据目录的章节标题快速定位到书中的内容。但索引在提高查询速度的同时需要额外的存储成本和维护成本,会降低对表更新操作的速率。 01 | 索引类型 1.1 普通索引 最基本的索引类型,基于普通字段建立的索引,没有任何限制。 1.2 唯一索引 在普通索引的基础上,要求字段值必须唯一,但允许NULL值 1.3 主键索引 特殊的唯一索引,不允许NULL值且一个表只能有一个主键 1.4 复合索引 1.5 全文索引 ...

源码有毒的专栏 376

【MySQL】索引原理详解

本文详细介绍了MySQL索引原理及优化实践。主要内容包括:索引基础概念(提高查询速度但占用存储空间)、不同类型索引(主键、唯一、普通、全文、复合索引)、B+Tree数据结构特点(适合范围查询)、聚簇索引与非聚簇索引区别(是否回表)、联合索引的最左前缀原则,以及索引优化技巧(避免全表扫描、使用覆盖索引、防止索引失效)。文章还总结了常见易错点和面试高频考点,强调合理设计索引和EXPLAIN验证的重要性。掌握这些知识可显著提升SQL查询性能。

2301_81481532的博客 756

[MySQL]索引详解

索引就是帮助存储引擎快速获取数据的一种数据结构 , 形象的说:"索引就是数据的目录".

Node_Hao的博客 2215

MySQL 索引详解

如果一个索引包含(或者说覆盖)所有需要查询的字段的值,我们就称之为“覆盖索引”。我们知道InnoDB存储引擎中,如果不是主键索引,叶子节点存储的是主键+列值。最终还是要“回表”,也就是要通过主键再查找一次。这样就会比较慢覆盖索引就是把要查询出的列和索引是对应的,不做回表操作!

Beau Wang 1502
上一篇: jquery delegate() 方法的使用
下一篇: SQL 优化——一般步骤、索引问题、优化方法(ANALYZE、CHECK、OPTIMIZE)、常用 SQL 的优化
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值