MYSQL服务器在一百万条记录上运行查询速度非常慢
我正在使用MYSQL管理图书库数据,这是我的主表MYSQL服务器在一百万条记录上运行查询速度非常慢,mysql,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,
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分钟
有没有办法加快这些查询的速度?
非常感谢
我运行querySELECT*FROM book,其中bookid=[bookid]和pageNum=[pageNumber]
大约需要2分钟
您可以创建索引以加快筛选速度:
CREATE INDEX idx ON book(bookid, pageNum);
至于,像“%[Search Word]%”
这样的页面数据并不是那么简单,因为您在开始时使用的是“%”
,这使得查询不那么简单
我运行querySELECT*FROM book,其中bookid=[bookid]和pageNum=[pageNumber]
大约需要2分钟
您可以创建索引以加快筛选速度:
CREATE INDEX idx ON book(bookid, pageNum);
至于
,像“%[Search Word]%”这样的页面数据并不是那么简单,因为您在开始搜索时使用的是“%”
,而它不会进行查询。类似于表达式的
WHERE book.pageData LIKE '%[Search Word]%'
是不可搜索的,因此book
表上的任何索引都可能不会被MySQL使用。因此,我们可以在book
表上采用全表扫描策略,并在kotarbooks
表上建立索引:
CREATE INDEX kotaridx ON kotarabooks (BookId, BookName);
包含BookId
列应该有助于联接,并且BookName
包含此列,因为它显示select子句。类似表达式:
WHERE book.pageData LIKE '%[Search Word]%'
是不可搜索的,因此book
表上的任何索引都可能不会被MySQL使用。因此,我们可以在book
表上采用全表扫描策略,并在kotarbooks
表上建立索引:
CREATE INDEX kotaridx ON kotarabooks (BookId, BookName);
包含BookId
列应该有助于连接,并且BookName
包含此列,因为它出现在select子句中。查找“索引”。它会加快查找速度没有索引?没有外键?什么是id
以及为什么需要它以及bookId
?查找“索引”。它会加快查找速度没有索引?没有外键?什么是id
,为什么您需要它以及bookId
?