此查询有什么问题?从mysql表加载数据需要0.5到0.6秒,超过220,000条记录
SELECT correct
FROM `answers`
WHERE `assignment_id` =2055
AND (
`correct` = 'N' || 'NA'
)
AND `topic_id` = '50#j1_5'
AND `student_id`
IN ( 702, 223, 237, 252, 229, 246, 1050, 256, 248, 1049, 243, 241, 244, 242, 249, 236, 250, 245 )
LIMIT 0 , 30
如何更快地获取数据?See the explain result
答案 0 :(得分:0)
这不是一个完整的答案(至少目前为止),但是太大而无法发表评论。
您可以向表中添加索引。这样做的语法是: -
https://dev.mysql.com/doc/refman/8.0/en/create-index.html
我会猜测,使用columns_id和student_id列的索引可能对大多数人有帮助。
ALTER TABLE `answers` ADD INDEX `assignment_id_student_id` (`assignment_id`, `student_id`);
这可能需要一些时间(tbh,可能不是在这种情况下,但需要注意更大/更复杂的索引)。
请注意,MySQL通常会在表上使用单个索引,而不是组合索引。因此,您设置了一个涵盖多个列的索引。
答案 1 :(得分:0)
namespace readtask
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
Process.Start(@"E:\SAMPLE PROJECTS\TaskName.xml");
}
}
}
这是什么意思?
correct = 'N' || 'NA'
嗯,这并不意味着其中任何一个。
要更快地运行,请添加此复合索引:
correct = CONCAT('N', 'NA')
correct = 'N' OR correct = 'NA'
列的顺序很重要。 (但这不是唯一的最佳排序。)单列索引不是很好。 Kichstart的索引都没有那么好,因为它不包括所有INDEX(assignment_id, topic_id, correct, student_id)
列第一个。
基数并不重要。
数字与字符串 - 在索引中无关紧要。