gpt4 book ai didi

mysql - 在 MYSQL 查询中使用 WHERE 和 ORDER BY 条件时结果非常慢

转载 作者:行者123 更新时间:2023-11-29 16:10:10 25 4
gpt4 key购买 nike

我面临结果非常慢的问题。

我也分享表结构和结果。

如果您有任何建议,请尽快更新。

================================================== =================表结构 -- https://www.phpmyadmin.net/ -- -- 主机:本地主机:3306 --生成时间:2019年3月25日上午11:48 -- 服务器版本:5.5.61-cll -- PHP版本:7.2.7

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";

--
-- Database: `energe3c_lms`
--

-- --------------------------------------------------------

--
-- Table structure for table `user_material`
--

CREATE TABLE `user_material` (
`id` int(11) NOT NULL,
`user_course_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`material_id` int(11) NOT NULL,
`attempt` int(11) NOT NULL,
`another_attempt` tinyint(1) DEFAULT '0',
`status` varchar(255) DEFAULT NULL,
`complete` tinyint(1) DEFAULT NULL,
`percent` float DEFAULT '0',
`time` varchar(255) DEFAULT NULL,
`marking_time` varchar(255) DEFAULT NULL,
`marked_by` int(11) DEFAULT NULL,
`feedback` text,
`submitted_date` datetime DEFAULT NULL,
`marking_date` datetime DEFAULT NULL,
`created` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Indexes for dumped tables
--

--
-- Indexes for table `user_material`
--
ALTER TABLE `user_material`
ADD PRIMARY KEY (`id`),
ADD KEY `user_material-user` (`user_id`),
ADD KEY `user_material-material` (`material_id`),
ADD KEY `user_material-marking-user` (`marked_by`),
ADD KEY `user_course-user_material` (`user_course_id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `user_material`
--
ALTER TABLE `user_material`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- Constraints for dumped tables
--

--
-- Constraints for table `user_material`
--
ALTER TABLE `user_material`
ADD CONSTRAINT `user_course-user_material` FOREIGN KEY (`user_course_id`) REFERENCES `user_course` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `user_material-marking-user` FOREIGN KEY (`marked_by`) REFERENCES `user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
ADD CONSTRAINT `user_material-material` FOREIGN KEY (`material_id`) REFERENCES `material` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `user_material-user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

提交;

Showing rows 0 - 24 (25586268 total, Query took 0.0007 seconds.)

SELECT * FROM user_material

================================================== =================

Showing rows 0 - 24 (77 total, Query took 22.9434 seconds.)

SELECT * FROM user_material where status='submitted'

================================================== =================

Showing rows 0 - 24 (34026300 total, Query took 24.4978 seconds.) [submitted_date: ... - ...]

SELECT * FROM user_material ORDER BY submitted_date ASC

================================================== =================

如果您有任何建议,请告诉我。

我在 yii2 框架中使用此查询

最佳答案

对于此查询:

SELECT *
FROM user_material
WHERE status = 'submitted';

您想要在 user_material(status) 上建立索引。

对于此查询:

SELECT *
FROM user_material
ORDER BY submitted_date ASC

您希望在 user_material(subscribed_date) 上建立索引。

在这两种情况下,附加列可以位于指定为第一列的索引之后。我在您的架构中没有看到这些索引。

关于mysql - 在 MYSQL 查询中使用 WHERE 和 ORDER BY 条件时结果非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55330481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com