标签: filesort

在Ruby中,如何在目录列表中的文件夹之前列出/排序文件?

我必须在ruby中使用以下代码:

<%
  files = Dir.glob('/**/*')
  files.each do |file|
    puts file
  end
%>
Run Code Online (Sandbox Code Playgroud)

它输出(例如):

/dirA/file1.txt
/dirA/file2.txt
/dirB/file1.txt
/file1.txt
/file2.txt
/subdirA/file1.txt
Run Code Online (Sandbox Code Playgroud)

我希望它像这样输出:

/file1.txt
/file2.txt
/dirA/file1.txt
/dirA/file2.txt
/dirB/file1.txt
/subdirA/file1.txt
Run Code Online (Sandbox Code Playgroud)

基本上,我想在目录之前显示文件.我可以使用排序命令吗?

ruby directory filesort

5
推荐指数
1
解决办法
3718
查看次数

使用IN()子句生成Filesort

我有一个简单的表 - >

id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
by_id INT UNSIGNED NOT NULL
posted_on INT UNSIGNED NOT NULL
Run Code Online (Sandbox Code Playgroud)

我的桌面引擎是MyISAM.

我呼吁多列索引combo1by_id,posted_on,id

我运行这个查询 - >

EXPLAIN SELECT * FROM books 
        WHERE by_id = '1' AND posted_on = '0' 
        ORDER BY id DESC LIMIT 7;
Run Code Online (Sandbox Code Playgroud)

Extra柱说,Using where和键列说combo1

但是,当我运行此查询 - >

EXPLAIN SELECT * FROM books 
        WHERE by_id IN(1,7,10) AND posted_on = '0' 
        ORDER BY id DESC LIMIT 7;
Run Code Online (Sandbox Code Playgroud)

Extra …

mysql explain filesort

5
推荐指数
1
解决办法
163
查看次数

使用 LEFT JOIN 和 ORDER BY...LIMIT 查询慢,使用 Filesort

我有以下查询:

SELECT 
    fruit.date,
    fruit.name,
    fruit.reason,
    fruit.id,
    fruit.notes,
    food.name
FROM
    fruit
 LEFT JOIN
    food_fruits AS ff ON fruit.fruit_id = ff.fruit_id AND ff.type='fruit'
 LEFT JOIN
    food USING (food_id)
 LEFT JOIN
    fruits_sour AS fs ON fruits.id = fs.fruit_id
WHERE
    (fruit.date < DATE_SUB(NOW(), INTERVAL 180 DAY))
        AND (fruit.`status` = 'Rotten')
        AND (fruit.location = 'USA')
        AND (fruit.size = 'medium')
        AND (fs.fruit_id IS NULL)
ORDER BY `food.name` asc
LIMIT 15 OFFSET 0
Run Code Online (Sandbox Code Playgroud)

以及您可能想要的所有索引,包括以下正在使用的索引:

fruit        - fruit_filter (size, status, location, date)
food_fruits  - food_type (type)
food         - …
Run Code Online (Sandbox Code Playgroud)

mysql left-join filesort

5
推荐指数
1
解决办法
2214
查看次数

避免使用INNER JOIN + ORDER BY进行文件排序

我一直在阅读其他帖子,但我没有设法修复我的查询.

使用DESC命令查询慢了x20倍,我必须改进它.这是查询:

SELECT posts.post_id, posts.post_b_id, posts.post_title, posts.post_cont, posts.thumb, posts.post_user, boards.board_title_l, boards.board_title
FROM posts
INNER JOIN follow ON posts.post_b_id = follow.board_id
INNER JOIN boards ON posts.post_b_id = boards.board_id
WHERE follow.user_id =1
ORDER BY posts.post_id DESC 
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

这些是表格(更新):

CREATE TABLE IF NOT EXISTS `posts` (
`post_id` int(11) NOT NULL AUTO_INCREMENT,
`post_b_id` int(11) unsigned NOT NULL,
`post_title` varchar(50) COLLATE utf8_bin NOT NULL,
`post_cont` text COLLATE utf8_bin NOT NULL,
`post_mintxt` varchar(255) COLLATE utf8_bin NOT NULL,
`post_type` char(3) COLLATE utf8_bin NOT NULL, …
Run Code Online (Sandbox Code Playgroud)

mysql sql join sql-order-by filesort

5
推荐指数
1
解决办法
1975
查看次数

优化MySql查询以避免使用"使用filesort"

我需要您的帮助来优化查询以避免使用 "使用filesort".查询的工作是选择属于特定标记的所有文章.查询是:

  select title 
    from tag,
         article 
   where tag = 'Riyad' 
     AND tag.article_id = article.id 
order by tag.article_id
Run Code Online (Sandbox Code Playgroud)

表结构如下:

标签表

 CREATE TABLE `tag` (
 `tag` VARCHAR( 30 ) NOT NULL ,
 `article_id` INT NOT NULL ,
 KEY `tag` (`tag`),
 KEY `article_id` (`article_id`)
 ) ENGINE = MYISAM ;
Run Code Online (Sandbox Code Playgroud)

条款表

 CREATE TABLE `article` (
 `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
 `title` VARCHAR( 60 ) NOT NULL
 ) ENGINE = MYISAM 
Run Code Online (Sandbox Code Playgroud)

样本数据

 INSERT INTO `article` VALUES (1, 'About Riyad');
 INSERT …
Run Code Online (Sandbox Code Playgroud)

mysql optimization performance query-optimization filesort

4
推荐指数
1
解决办法
9302
查看次数

MYSQL在简单查询中使用ORDER BY索引列时使用filesort

我见过很多类似的问题,但我没有看到对我有用的解决方案.或者也许我只是在密集.:)希望有人可以帮助我.

我有下表:

CREATE TABLE `table_name` (
  `value1` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `value2` varchar(50) NOT NULL,
  `value3` tinytext,
  `value4` tinytext,
  `value5` tinytext,
  `value6` char(3) DEFAULT NULL,
  `value7` char(3) DEFAULT NULL,
  PRIMARY KEY (`value1`),
  KEY value2_index ('value2')
) ENGINE=MyISAM AUTO_INCREMENT=46 DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)

要验证我的索引已设置,这是SHOW INDEX结果:

+--------------+------------+----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table        | Non_unique | Key_name       | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+--------------+------------+----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| table_name   |          0 | PRIMARY        |            1 | value1 …
Run Code Online (Sandbox Code Playgroud)

mysql indexing filesort

4
推荐指数
1
解决办法
723
查看次数

mysql索引和优化,使用where; 暂时使用; 使用filesort

哪些表和列应该有索引?我有一个关于flow_permanent_id和entry_id的索引,但似乎是在使用filesort?

我该怎么做才能优化这个?

mysql> explain SELECT COUNT(*) AS count_all, entry_id AS entry_id FROM `votes` WHERE `votes`.`flow_permanent_id` = '4fab490cdc1c82cfa800000a' GROUP BY entry_id;
+----+-------------+-------+------+----------------------------------+----------------------------------+---------+-------+------+----------------------------------------------+
| id | select_type | table | type | possible_keys                    | key                              | key_len | ref   | rows | Extra                                        |
+----+-------------+-------+------+----------------------------------+----------------------------------+---------+-------+------+----------------------------------------------+
|  1 | SIMPLE      | votes | ref  | index_votes_on_flow_permanent_id | index_votes_on_flow_permanent_id | 74      | const |    1 | Using where; Using temporary; Using filesort |
+----+-------------+-------+------+----------------------------------+----------------------------------+---------+-------+------+----------------------------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

mysql indexing group-by count filesort

3
推荐指数
1
解决办法
1038
查看次数

按结果优化查询顺序到使用filesort;

查询:

    SELECT
        r.reply_id,
        r.msg_id,
        r.uid,
        r.body,
        r.date,
        u.username as username,
        u.profile_picture as profile_picture
    FROM
        pm_replies as r
        LEFT JOIN users as u
            ON u.uid = r.uid
    WHERE
        r.msg_id = '784351921943772258'

    ORDER BY r.date DESC
Run Code Online (Sandbox Code Playgroud)

我尝试了所有可以想到的索引组合,在谷歌搜索我最好能索引这个,但没有任何效果.

此查询在500个返回的项目上获取0,33计数 ...


说明:

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra
1   SIMPLE  r   ALL     index1  NULL    NULL    NULL    540     Using where; Using filesort
1   SIMPLE  u   eq_ref  uid     uid     8   site.r.uid  1   
Run Code Online (Sandbox Code Playgroud)

SHOW CREATE pm_replies

CREATE TABLE …
Run Code Online (Sandbox Code Playgroud)

mysql sql indexing filesort

2
推荐指数
1
解决办法
195
查看次数

MySQL:使用IN和ORDER BY时避免使用filesort

假设我有下表(让我们称之为my_table):

CREATE TABLE `my_table` (
  `table_id` int(10) unsigned NOT NULL auto_increment,
  `my_field` int(10) unsigned NOT NULL default '0'
   PRIMARY KEY  (`table_id`),
   KEY `my_field` (`my_field`,`table_id`)
 ) ENGINE=MyISAM
Run Code Online (Sandbox Code Playgroud)

主键my_tabletable_id(auto_increment),我也有一个带my_field和的键table_id.

如果我测试这个查询...

EXPLAIN SELECT * FROM my_table
WHERE my_field = 28
ORDER BY table_id DESC;
Run Code Online (Sandbox Code Playgroud)

......我明白了:

id  select_type  table     type  possible_keys  key       key_len  ref    rows  Extra
--- -----------  --------  ----  -------------  --------  -------  -----  ----  -----
1   SIMPLE       my_table  ref   my_field       my_field  8        const …

mysql sql performance filesort

1
推荐指数
1
解决办法
6488
查看次数