跳到主要内容

MySQL字符串大小写转换需要用到MySQL字符串大小写转换函数。

mysql 字符串大小写转化函数有两对: lower(), upper() 和 lcase(), ucase():

选择 lower(), upper() 来实现MySQL转换字符串大小写,因为这和其他数据库中函数相兼容

LIMIT 分页性能问题


LIMIT OFFSET, ROW_COUNT 实现分页
存在性能问题的方式
SELECT * FROM myTable ORDER BY `id` LIMIT 1000000, 30
写出这样SQL语句的人肯定心里是这样想的:MySQL数据库会直接定位到符合条件的第1000000位,然后再取30条数据。

然而,实际上MySQL不是这样工作的。

LIMIT 1000000, 30 的意思是:扫描满足条件的1000030行,扔掉前面的1000000行,然后返回最后的30行。

较好的方式
SELECT t.*
FROM (
SELECT id
FROM myTable
ORDER BY
id
LIMIT 1000000, 30
) q
JOIN myTable t
ON t.id = q.id
大概的原理是:

子查询只用到了索引列,没有取实际的数据,所以不涉及到磁盘IO,所以即使是比较大的 offset,查询速度也不会太差。



子查询,索引扫描

SELECT * FROM tableName
WHERE id >= (SELECT id FROM tableName ORDER BY id LIMIT 500000 , 1)
LIMIT 2;



Join分页

SELECT *
FROM tableName AS t1
JOIN (SELECT id FROM tableName ORDER BY id desc LIMIT 500000, 1) AS t2
WHERE t1.id <= t2.id ORDER BY t1.id desc LIMIT 2;