福布斯forbos-小李LRtc520999提出的mysql索引问题

本文探讨了小李经理在使用MySQL 5.7.21环境中创建的组合索引问题。尽管查询时不直接使用索引的前导列,但查询依然利用索引。通过`EXPLAIN`结果,解析了为何出现这种情况并寻求解答。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql 5.7.21 linux 6.8

福布斯gb59,com的小李经理LRtc520999建立一个组合索引,在查询的时候不使用这个这个组合索引的前导列进行查询但还是走索引,请教各位!

show create table t;
±------±---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
±------±---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t | CREATE TABLE t (
name varchar(20) DEFAULT NULL,
age int(29) DEFAULT NULL,
local varchar(30) DEFAULT NULL,
KEY xxxx (name,age,local)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
±------±---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

select count() from t;
±---------+
| count(
) |
±---------+
| 10000 |
±---------+

explain select name from t where local=‘xx33’;
±—±------------±------±-----------±------±--------------±-----±--------±-----±------±---------±-------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
±—±------------±------±-----------±------±--------------±-----±--------±-----±------±---------±-------------------------+
| 1 | SIMPLE | t | NULL | index | NULL | xxxx | 61 | NULL | **61 | 10.00 | Using where; Using index |
±—±------------±------±-----------±------±--------------±-----±--------±-----±------±---------±-------------------------+

以下是使用C语言实现在STM32中实现RTC计时,检测LED电流,当电流大于100mA时,RTC计时5秒后,LED灭的示例代码: ```c #include "stm32f4xx.h" void RTC_Configuration(void); void GPIO_Configuration(void); void ADC_Configuration(void); void Delay(__IO uint32_t nCount); uint32_t startDetectionTime = 0; uint32_t ledOnTime = 0; int main(void) { RTC_Configuration(); // 配置RTC GPIO_Configuration(); // 配置GPIO ADC_Configuration(); // 配置ADC while (1) { uint32_t currentTime = RTC_GetCounter(); // 获取当前RTC计数值 if ((currentTime - startDetectionTime) >= 5) // 检测时间超过5秒 { GPIO_ResetBits(GPIOA, GPIO_Pin_5); // 关闭LED } if ((currentTime - ledOnTime) >= 5) // 点亮LED时间超过5秒 { GPIO_ResetBits(GPIOA, GPIO_Pin_5); // 关闭LED } uint16_t adcValue = ADC_GetConversionValue(ADC1); // 获取ADC转换结果 if (adcValue > 100) // 判断电流是否大于100mA { GPIO_SetBits(GPIOA, GPIO_Pin_5); // 点亮LED ledOnTime = currentTime; // 记录LED点亮时间 } } } void RTC_Configuration(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); // 使能PWR时钟 PWR_BackupAccessCmd(ENABLE); // 允许访问RTC和后备寄存器 RCC_LSEConfig(RCC_LSE_ON); // 启动外部低速振荡器(LSE) while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) {} // 等待LSE稳定 RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); // 设置RTC时钟源为LSE RCC_RTCCLKCmd(ENABLE); // 使能RTC时钟 RTC_InitTypeDef RTC_InitStructure; RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24; // 24小时格式 RTC_InitStructure.RTC_AsynchPrediv = 0x7F; // 异步分频器预分频值 RTC_InitStructure.RTC_SynchPrediv = 0xFF; // 同步分频器预分频值 RTC_Init(&RTC_InitStructure); // 初始化RTC RTC_TimeTypeDef RTC_TimeStructure; RTC_TimeStructure.RTC_Hours = 0x00; // 设置RTC小时 RTC_TimeStructure.RTC_Minutes = 0x00; // 设置RTC分钟 RTC_TimeStructure.RTC_Seconds = 0x00; // 设置RTC秒钟 RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure); // 设置RTC时间 RTC_DateTypeDef RTC_DateStructure; RTC_DateStructure.RTC_Date = 0x01; // 设置RTC日期 RTC_DateStructure.RTC_Month = 0x01; // 设置RTC月份 RTC_DateStructure.RTC_Year = 0x21; // 设置RTC年份(21代表2021年) RTC_DateStructure.RTC_WeekDay = 0x01; // 设置RTC星期几(星期一) RTC_SetDate(RTC_Format_BIN, &RTC_DateStructure); // 设置RTC日期 } void GPIO_Configuration(void) { RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); // 使能GPIOA时钟 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; // LED连接到PA5引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // 输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // 推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; // GPIO速度为100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; // 不启用上下拉电阻 GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化GPIOA } void ADC_Configuration(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); // 使能ADC1时钟 ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; // 12位精度 ADC_InitStructure.ADC_ScanConvMode = DISABLE; // 禁用扫描模式 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; // 禁用连续转换模式 ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; // 不使用外部触发 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; // 数据右对齐 ADC_InitStructure.ADC_NbrOfConversion = 1; // 转换通道数为1 ADC_Init(ADC1, &ADC_InitStructure); // 初始化ADC1 ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_3Cycles); // 配置ADC通道0 ADC_Cmd(ADC1, ENABLE); // 使能ADC1 ADC_TempSensorVrefintCmd(ENABLE); // 使能温度传感器和内部参考电压 } void Delay(__IO uint32_t nCount) { while (nCount--); } ``` 需要注意的是,以上代码仅提供了基本的实现框架,具体的配置和初始化可能需要根据不同的STM32系列和开发环境进行调整。在实际使用时,还需要根据具体需求进行适当的错误处理和容错机制的添加。另外,电流检测的具体方法可能需要根据使用的传感器或模块而定,以上代码仅作为示例,实际应用中需要根据传感器的接口和协议进行相应的配置和读取操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jcjc0305

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值