【发布时间】:2021-02-06 10:02:12
【问题描述】:
我在 mysql 中创建了一个用于搜索文章的存储过程。 所以当我想调用它时,我得到了这个错误。
SQL 错误 [1038] [HY001]:排序内存不足,请考虑增加服务器排序缓冲区大小
我的代码目的是先根据标题相对排序文章,然后根据描述相对排序。
在增加缓冲区大小(并重新启动 mysql 服务,然后再次调用 sp)之后,我也收到此错误: SQL 错误 [S1000]: 无法从服务器检索事务只读状态
create PROCEDURE art_usp_Article_Search(in SearchTerm varchar(200),in SortColumn varchar(100),in SortOrder varchar(5),in PageNumber int,in PageSize int)
BEGIN
DECLARE StartRow INT;
DECLARE EndRow INT;
declare NSortColumn varchar(100);
declare NSortOrder varchar(100);
-- calculate the starting and ending of records
SET NSortColumn = LOWER(IFNULL(SortColumn, ''));
SET NSortOrder = LOWER(IfNULL(SortOrder, ''));
SET StartRow = (PageNumber - 1) * PageSize ;
SET EndRow = (PageNumber * PageSize)+1 ;
WITH CTETitleResult AS (
SELECT ROW_NUMBER() OVER (ORDER BY
CASE
WHEN (@SortColumn = 'title' AND @SortOrder='asc') THEN title
WHEN (@SortColumn = 'date' AND @SortOrder='asc') THEN date
end
) AS RowNumber
, COUNT(*) OVER () AS TotalCount
,id,code,categoryId ,title,shortDescription ,description ,tags ,content,date,time,typeId,isActive,isSpecial,visited,author,imageId,statusId,created_by,updated_by,created_at,updated_at
FROM art_article aa
WHERE isActive = 1
AND (
(IfNULL(SearchTerm, '') = '' OR title LIKE CONCAT('%', SearchTerm, '%'))
)
),CTEDescriptionResult AS (
SELECT ROW_NUMBER() OVER (ORDER BY
CASE
WHEN (@SortColumn = 'title' AND @SortOrder='asc') THEN title
WHEN (@SortColumn = 'date' AND @SortOrder='asc') THEN date
end
) AS RowNumber
, COUNT(*) OVER () AS TotalCount
,id,code,categoryId ,title,shortDescription ,description ,tags ,content,date,time,typeId,isActive,isSpecial,visited,author,imageId,statusId,created_by,updated_by,created_at,updated_at
FROM art_article aa
WHERE isActive = 1
AND (
(IfNULL(SearchTerm, '') = '' OR shortDescription LIKE CONCAT('%', SearchTerm, '%'))
)
)
SELECT *
FROM CTETitleResult
WHERE RowNumber > StartRow AND RowNumber < EndRow
union
SELECT *
FROM CTEDescriptionResult
WHERE RowNumber > StartRow AND RowNumber < EndRow
ORDER BY RowNumber;
END
call art_usp_Article_Search('','title','asc',1,10)
【问题讨论】:
标签: mysql stored-procedures buffer