MySQL MariaDB
怎么建立索引
Normal 普通索引
表示普通索引,大多数情况下都可以使用
Unique 唯一索引
表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique
约束唯一标识数据库表中的每一条记录,即在单表中不能用每条记录是唯一的(例如身份证就是唯一的),Unique(要求列唯一)和Primary Key(primary key = unique + not null 列唯一)约束均为列或列集合中提供了唯一性的保证,Primary Key是拥有自动定义的Unique约束,但是每个表中可以有多个Unique约束,但是只能有一个Primary Key约束。 mysql中创建Unique约束
Full Text 全文索引
表示全文收索,在检索长文本的时候,效果最好,短文本建议使用Index,但是在检索的时候数据量比较大的时候,现将数据放入一个没有全局索引的表中,然后在用Create Index创建的Full Text索引,要比先为一张表建立Full Text然后在写入数据要快的很多
FULLTEXT 用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。
SPATIAL 空间索引
空间索引是对空间数据类型的字段建立的索引,MYSQL中的空间数据类型有4种,分别是GEOMETRY、POINT、LINESTRING、POLYGON。MYSQL使用SPATIAL关键字进行扩展,使得能够用于创建正规索引类型的语法创建空间索引。创建空间索引的列,必须将其声明为NOT NULL,空间索引只能在存储引擎为MYISAM的表中创建
btree索引和hash索引的区别
1、BTREE(B树(可以是多叉树)) {主流使用} 2、HASH(key,value) 这种方式对范围查询支持得不是很好
- 索引 FULLTEXT NORMAL SPATIAL UNIQUE
- 索引 BTREE HASH RTREE
参考文献
MySQL/MariaDB数据库的索引工作原理和优化 - 尹正杰 - 博客园
MYSQL索引类型:FULLTEXT、NORMAL、SPATIAL、UNIQUE索引spatial是誰萆微了承諾的博客-CSDN博客
MySql下大数据量级别(1000万+)优化查询和操作方法_mysql数量级别_caox_nazi的博客-CSDN博客
处理亿级数据的“定时任务”,如何缩短执行时间?-阿里云开发者社区
15 个有用的 MySQL/MariaDB 性能调整和优化技巧 - da0h1 - 博客园
Mysql索引数据类型:HASH,BTREE,RTREE。mysql 索引 btree rtree hash峰之流觞的博客-CSDN博客
MySQL 子查询(IN)
select SUM(`sum_value`) as `data_value`, `report_date_day` as `data_time` from `device_sensor_data_hourly` where (`function_key_value` = '3-29') and `report_date_day` between 20230801 and 20230808 group by `data_time`
MySQL(七)---子查询(IN)子查询 in 抽离写法加大爷的博客-CSDN博客
查询LOG
set @device_sensor_id:=160;
set @device_property_id:=5576;
SELECT function_key_value FROM `sh-iot`.`device_sensor_specs` WHERE `device_sensor_id` = @device_sensor_id AND `group` = '内机6数据' AND `function_name` = '开关机' LIMIT 1 INTO @function_key_value_kaiguan;
SELECT function_key_value FROM `sh-iot`.`device_sensor_specs` WHERE `device_sensor_id` = @device_sensor_id AND `group` = '内机6数据' AND `function_name` = '运行模式设定' LIMIT 1 INTO @function_key_value_moshi;
SELECT function_key_value FROM `sh-iot`.`device_sensor_specs` WHERE `device_sensor_id` = @device_sensor_id AND `group` = '内机6数据' AND `function_name` = '温度' LIMIT 1 INTO @function_key_value_wendu;
SELECT function_key_value FROM `sh-iot`.`device_sensor_specs` WHERE `device_sensor_id` = @device_sensor_id AND `group` = '内机6数据' AND `function_name` = '风速' LIMIT 1 INTO @function_key_value_fengsu;
INSERT INTO `sh-iot`.`virtual_device_data` (`virtual_device_id`, `device_id`, `device_property_id`, `device_sensor_id`, `function_key_value`, `name`, `created_at`, `updated_at`) VALUES (@virtual_device_id, @device_id, @device_property_id, @device_sensor_id, @function_key_value_kaiguan, '开关', NOW(), NOW());
INSERT INTO `sh-iot`.`virtual_device_data` (`virtual_device_id`, `device_id`, `device_property_id`, `device_sensor_id`, `function_key_value`, `name`, `created_at`, `updated_at`) VALUES (@virtual_device_id, @device_id, @device_property_id, @device_sensor_id, @function_key_value_moshi, '模式', NOW(), NOW());
INSERT INTO `sh-iot`.`virtual_device_data` (`virtual_device_id`, `device_id`, `device_property_id`, `device_sensor_id`, `function_key_value`, `name`, `created_at`, `updated_at`) VALUES (@virtual_device_id, @device_id, @device_property_id, @device_sensor_id, @function_key_value_wendu, '温度', NOW(), NOW());
INSERT INTO `sh-iot`.`virtual_device_data` (`virtual_device_id`, `device_id`, `device_property_id`, `device_sensor_id`, `function_key_value`, `name`, `created_at`, `updated_at`) VALUES (@virtual_device_id, @device_id, @device_property_id, @device_sensor_id, @function_key_value_fengsu, '风速', NOW(), NOW());