[英]how to improve select performance in mysql?
我有来自数据库(mysql)表的1034961行数据。
结构体..
表格:tb_blog_image
| id(pk) | link(TEXT) | img_link(TEXT) |
| 1 |blogpost.com/aaa|http://sky.png |
| 2 |blogpost.com/aaa|http://girl.png |
| 3 |blogpost.com/aaa|http://cad.png |
现在,我想从tb_blog_images中选择特定的img_link列表。
sql ..
select link, img_link
from tb_blog_image
where link = 'blogpost.com/aaa';
结果38行6.37秒
如何提高选择效果? 使链接列索引? 表规范化?
我想在1秒内运行。
我想听听各种技巧。
理想情况下,您将在程序中使用主键(id)。
但是如果失败,在链接列上的索引将解决您的问题。 现在,您正在运行的查询要求从磁盘中加载表中的所有一百万行,然后将其与查询字符串值进行比较。 使用索引,可以将其减少到不超过三或四个磁盘读取。
另外,文本数据类型与表的其余部分分开存储,这不是很有效。 我将两个文本列重新定义为varchar(300)之类的东西,它对于可能遇到的任何URL来说肯定足够长,但也提供了更有效的存储:TEXT类型实际上是(可能)长字段的例如备忘录或网页内容。
您可能对要优化以提高性能的变量感兴趣。
Set global thread_cache_size = 4;
Set global query_cache_size = 1024*1024*1024;
Set global query_cache_limit=768*1024;
Set global query_cache_min_res_unit = 2048;
Set long_query_time = 5;
资源:
http://www.snip2code.com/Snippet/1171/List-of-Variables-to-be-set-in-MySQL-for?fromPage=1
您正在从单个表中选择数据,因此执行时间的改善仅取决于索引
可以使用一个ALTER TABLE语句在一个表上创建多个索引,这是相对有效的,因为该表的聚集索引只需要扫描一次
有关更多详细信息,请参见http://dev.mysql.com/doc/innodb/1.1/en/innodb-create-index-examples.html
我不知道您使用的是MySQL以外的其他语言,但是您可以选择id
,而不是同时选择link
和img_link
列。
该代码将是这样的:
select id
from tb_blog_image
where link = 'blogpost.com/aaa';
// Now Fetch The Rows
Echo the rows using a loop one by one {
// Inside this loop, do this
select link, img_link
from tb_blog_image
where link = $id
// $id is a variable of the current row
echo "whatever you want";
}
让我知道您正在使用哪种语言,如果它是PHP,那么我可以提供帮助。
让我知道,是否可以改善性能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.