这次又是我孤陋寡闻了。
优化WooCommerce的慢查询的时候发现他的查询语句带了SQL_CALC_FOUND_ROWS关键字,好陌生。
详细了解后发现是个神器。
以往做分页基本要写以下两条SQL:
SELECT COUNT(*) from [table] WHERE ......;
SELECT * FROM [table] WHERE ...... limit M,N;
这将执行两次主查询,而使用SQL_CALC_FOUND_ROWS之后则可以这样写:
SELECT SQL_CALC_FOUND_ROWS * FROM [table] WHERE ...... limit M, N;
SELECT FOUND_ROWS();
虽然SQL语句也是两条,但是在第一条查询执行后会将行数保存下来,第二条SQL相当于直接取数值,这样就比之前的方案快非常多。