mysql - MYSQL 服务器在 100 万条记录上运行查询非常慢
问题描述
我正在使用 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 分钟 有什么办法可以加快这些查询的速度吗?非常感谢
解决方案
我运行查询
SELECT * FROM book WHERE bookid=[bookid] AND pageNum=[pageNumber]
大约需要 2 分钟
您可以创建索引来加速过滤:
CREATE INDEX idx ON book(bookid, pageNum);
至于 forWHERE pageData like '%[Search Word]%'
并不是那么微不足道,因为您'%'
在开始时使用 using 进行搜索,并且查询不是SARGable。
推荐阅读
- spring - Spring批处理-如何根据条件检查添加Flow
- python - Wagtail Heroku 托管部署
- javascript - 覆盖选择选项以添加颜色
- coq - 经典公理意味着每个命题都是可判定的?
- android - chromecast sendMessage 中的 IllegalStateException
- javascript - 无法从 localStorage 中检索项目
- go - 简单的leader选举(无状态的leader选举)
- java - Java:模式如何在两个大括号之间以任何顺序匹配任何字符或符号
- android - 如何减少 React Native 构建 apk 的大小
- ios - 为什么我在 EXPO 中收到 iOS 构建错误?