1

我有来自数据库(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 秒内跑完。

我想听各种提示。

4

4 回答 4

4

理想情况下,您会在程序中使用主键 (id)。

但如果做不到这一点,链接列上的索引将解决您的问题。现在,您正在运行的查询要求从磁盘加载表中的所有一百万行,然后与您的查询字符串值进行比较。使用索引,这可以减少到不超过三个或四个磁盘读取。

此外,文本数据类型与表的其余部分分开存储,效率不高。我会将两个文本列重新定义为 varchar(300) 之类的内容,对于可能遇到的任何 URL,它肯定足够长,但也提供了更有效的存储:TEXT 类型实际上适用于(可能)长字段例如备忘录或网页内容。

于 2013-07-07T14:51:28.380 回答
2

您可能对要调整以获得良好性能的变量感兴趣。

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

于 2013-07-08T20:31:35.737 回答
1

您正在从单个表中选择数据,因此执行时间的改进仅通过索引

可以用一条ALTER TABLE语句在一张表上创建多个索引。这样比较高效,因为表的聚集索引只需要扫描一次

有关更多详细信息,请参阅 http://dev.mysql.com/doc/innodb/1.1/en/innodb-create-index-examples.html

于 2013-07-07T15:08:52.440 回答
0

我不知道您使用的是哪种语言而不是 MySQL,但是linkimg_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,我可以提供帮助。

让我知道,如果它提高了性能。

于 2017-08-03T15:25:55.877 回答