MYSQL服务器在100万条记录上运行查询的速度非常慢

时间:2019-05-29 16:23:16

标签: mysql

我正在使用MYSQL管理图书库数据,这是我的主表

CREATE TABLE `book` (
`id` int(11) NOT NULL,
`bookId` int(11) DEFAULT NULL,
`pageNum` smallint(6) DEFAULT NULL,
`pageData` longtext
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

现在,当我运行此查询时

SELECT c.id, c.bookId,c.pageNum, c.pageData, o.BookName FROM book c  left 
join kotarbooks o on c.bookId=o.BookId WHERE pageData like '%[Search Word]%'"

大约需要3分钟

当我运行查询时

SELECT * FROM book WHERE bookid=[bookid] AND pageNum=[pageNumber]

大约需要2分钟 有什么想法可以加快这些查询的速度吗? 非常感谢

2 个答案:

答案 0 :(得分:0)

  

我运行查询SELECT * FROM book WHERE bookid=[bookid] AND pageNum=[pageNumber]   大约需要2分钟

您可以创建索引以加快过滤速度:

CREATE INDEX idx ON book(bookid, pageNum);

对于WHERE pageData like '%[Search Word]%'来说并不是那么琐碎,因为您在一开始使用'%'进行搜索,并且查询不是SARGable

答案 1 :(得分:0)

LIKE表达式:

WHERE book.pageData LIKE '%[Search Word]%'

是不可保留的,因此book表上的任何索引可能不会被MySQL使用。因此,我们可以改为采用book表上的全表扫描策略以及kotarbooks表上的索引:

CREATE INDEX kotaridx ON kotarabooks (BookId, BookName);

包含BookId列应有助于连接,BookName涵盖了此列,因为它出现了select子句。