mysql

114 阅读1分钟

判断一条数据是否存在

使用count 会比limit 慢

count 全表扫描

尽量避免在where子句中对字段进行函数操作,这将导致存储引擎放弃使用索引而进行全表扫描。对于需要计算的值最好通过程序计算好传入而不是在sql语句中做计算,比如这个sql中我们将当前的日期和七天前的日期计算好传入

order by string

SELECT id, log_folder_name, log_file_name, log_line_num, log_file_updated_at FROM chat_log
ORDER BY log_file_name desc LIMIT 10

image.png

字符串的比对, 从第一个字符开始比对,比对到singledata_2的12位 的 2 和 singledata_10 的12位 的1的时候 2 大于1 ,singledata_2 大于 singledata_10 不会再进后面的字符的比对

改为substring_index 截取数字

SELECT id, log_folder_name, log_file_name, log_line_num, log_file_updated_at FROM chat_log
ORDER BY log_folder_name desc, CONVERT(substring_index(log_file_name,'_', -1), SIGNED) desc, log_line_num desc LIMIT 10