【发布时间】:2026-01-24 22:25:02
【问题描述】:
我需要您的帮助来优化下面的查询。让我们假设我们有一个用于文章的 Web 应用程序。软件使用两张表,一张是文章表,一张是用户表。文章表保存文章的创建日期、id、正文、标题和部分。让我们假设我们有一个名为“新闻”的版块,并且有 100 万篇文章属于新闻版块。那么在这种情况下,如何优化以下查询:
SELECT username,title FROM article,users
WHERE article.auther_id=users.id AND section LIKE 'news'
ORDER BY article.date DESC
LIMIT 0,40
表结构为:
CREATE TABLE `article` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`title` VARCHAR( 100 ) NOT NULL ,
`body` VARCHAR( 200 ) NOT NULL ,
`date` VARCHAR( 30 ) NOT NULL ,
`auther_id` INT NOT NULL ,
`section` VARCHAR( 30 ) NOT NULL
) ENGINE = MYISAM ;
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 30 ) NOT NULL
) ENGINE = MYISAM ;
我尝试创建一个包含部分和日期的索引,但它不是最好的,因为如果我们有 200 万条记录并且其中一百万条属于一个部分,数据库将扫描一百万行。
【问题讨论】:
-
我猜您没有使用 DATE 数据类型作为日期是有原因的?
-
不,没有理由。当我设计数据库时,我不知道 DATE 数据类型。
标签: sql mysql optimization query-optimization