如何提高mysql中的select性能?
我有来自数据库(mysql)表的1034961行数据 结构 表:tb_博客_图像如何提高mysql中的select性能?,mysql,sql,performance,Mysql,Sql,Performance,我有来自数据库(mysql)表的1034961行数据 结构 表:tb_博客_图像 | 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|htt
| 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_图片中选择特定的img_链接列表
sql
结果38行6.37秒
如何提高select性能?
是否将列链接到索引?
表规范化
我想在1秒内跑
我想听听各种提示 理想情况下,您应该在程序中使用主键(id) 但如果做不到这一点,链接列上的索引将解决您的问题。现在,您正在运行的查询要求从磁盘加载表中的所有一百万行,然后与查询字符串值进行比较。使用索引,这可以减少到不超过三到四次磁盘读取
此外,文本数据类型与表的其余部分分开存储,这不是很有效。我会将这两个文本列重新定义为类似varchar(300)的内容,对于可能遇到的任何URL来说,它肯定足够长,但也提供了更高效的存储:文本类型实际上是(可能)长字段,如备忘录或网页内容。理想情况下,您应该使用主键(id)在你的程序中 但如果做不到这一点,链接列上的索引将解决您的问题。现在,您正在运行的查询要求从磁盘加载表中的所有一百万行,然后与查询字符串值进行比较。使用索引,这可以减少到不超过三到四次磁盘读取
此外,文本数据类型与表的其余部分分开存储,这不是很有效。我会将这两个文本列重新定义为类似varchar(300)的内容,对于可能遇到的任何URL来说,它肯定足够长,但也提供了更高效的存储:文本类型实际上是(可能)长字段,如备忘录,或者网页的内容。您正在从单个表中选择数据,因此执行时间的改进仅通过索引实现 使用一条ALTER table语句可以在一个表上创建多个索引。这是相对高效的,因为表的聚集索引只需要扫描一次 有关更多详细信息,请参阅
您正在从单个表中选择数据,因此执行时间的改进仅通过索引实现 使用一条ALTER table语句可以在一个表上创建多个索引。这是相对高效的,因为表的聚集索引只需要扫描一次 有关更多详细信息,请参阅
您可能对为获得良好性能而调整的变量感兴趣
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;
资料来源:
您可能对为获得良好性能而调整的变量感兴趣
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;
资料来源:
我不知道除了MySQL之外您使用的是哪种语言,但是您可以选择
id
而不是同时选择link
和img\u 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,我可以提供帮助
如果它提高了性能,请告诉我。我不知道,除了MySQL,您使用的是哪种语言,但是您可以选择
link
和img\u link
列,而不是id
代码如下所示:
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,我可以提供帮助
如果它提高了性能,请告诉我。您需要在
链接中添加索引。规范化链接列可能也值得研究。您可以向表中添加fultext索引:您可以将数据类型从文本更改为其他类型。我建议您必须将其更改为较小尺寸的varchar。但是怎么能这么久呢?我以前从未执行sql超过6.37秒。在该查询前面加上Explain,然后发布输出。我们可以猜到答案,在link列上添加一个索引,但是6秒来测试38行似乎有点过分。你需要在链接列中添加一个索引。当然需要索引。规范化链接列可能也值得研究。您可以向表中添加fultext索引:您可以将数据类型从文本更改为其他类型。我建议您必须将其更改为较小尺寸的varchar。但是怎么能这么久呢?我以前从未执行sql超过6.37秒。在该查询前面加上Explain,然后发布输出。我们可以猜测答案,在链接列上添加一个索引,但是用6秒来测试38行似乎有点难。您的新查询时间是多少?选择查询在1秒内运行。您的新查询时间是多少?选择查询在1秒内运行。