繁体   English   中英

如何提高mysql中的选择性能?

[英]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 ,而不是同时选择linkimg_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM