您好,我在数据库中有一个表,其中包含多列,超过20列,并且包含许多记录,大约200万个
该表具有一个主键:Col1,它也是我表的索引 ,由于某些原因,该列的数据类型为varchar(200)。
我正在实现服务器端的分页,排序和稍后的(过滤)
我在性能方面遇到问题,这是我的程序
keys = ['North America', 'USA']
print(my_dict.???)
Virginia
['Norfolk', 'Richmond', 'Charlottesville']
New York
['Albany']
keys = ['North America', 'Canada', 'Saskatchewan']
print(my_dict.???)
['Saskatoon']
keys = ['North America', 'Canada']
print(my_dict.???)
Saskatchewan
['Saskatoon']
New Brunswick
['Moncton', 'Saint John']
查询速度非常慢,并且会出现缓冲区大小问题。 如果我删除order by子句,它将变得非常快。
所以我的问题是
1-我如何增强此查询并使数百万行的排序快速进行?
2-稍后我将对多个列使用where子句应用过滤,如何避免任何性能问题?
答案 0 :(得分:1)
ORDER BY
应该被构造(concat,准备,执行,释放),而不是具有不能使用任何索引的庞大表达式。INDEX(col0), INDEX(col1), ...
,以使准备好的语句在所有21种情况下都很快。选择重要的内容,不要将其余的内容提供给最终用户。VARCHAR(200)
对于PRIMARY KEY
通常是不明智的。SHOW CREATE TABLE
。)