Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 即使索引在大表上,查询速度也很慢_Mysql - Fatal编程技术网

Mysql 即使索引在大表上,查询速度也很慢

Mysql 即使索引在大表上,查询速度也很慢,mysql,Mysql,我正在执行一个简单的select查询,以从包含54864行的表日志中提取用户名。 检索数据大约需要7.836秒。 我怎样才能加快表演速度 SELECT username FROM `logs` WHERE logs.branch=1 and logs.added_on > '2016-11-27 00:00:00' 在描述表上 +-------------------+-------------+------+-----+---------+----------------+ | F

我正在执行一个简单的select查询,以从包含54864行的表日志中提取用户名。 检索数据大约需要7.836秒。 我怎样才能加快表演速度

SELECT username FROM `logs`
WHERE 
logs.branch=1 
and
logs.added_on > '2016-11-27 00:00:00'
在描述表上

+-------------------+-------------+------+-----+---------+----------------+
| Field             | Type        | Null | Key | Default | Extra          |
+-------------------+-------------+------+-----+---------+----------------+
| id                | int(11)     | NO   | PRI | NULL    | auto_increment |
| username          | char(255)   | YES  | MUL | NULL    |                |
| fullname          | char(255)   | YES  |     | NULL    |                |
| package           | char(255)   | YES  |     | NULL    |                |
| prev_expiry       | date        | YES  |     | NULL    |                |
| recharged_upto    | date        | YES  |     | NULL    |                |
| payment_option    | int(11)     | YES  | MUL | NULL    |                |
| amount            | float(14,2) | YES  |     | NULL    |                |
| branch            | int(11)     | YES  | MUL | NULL    |                |
| added_by          | int(11)     | YES  |     | NULL    |                |
| added_on          | datetime    | YES  | MUL | NULL    |                |
| remark            | text        | YES  |     | NULL    |                |
| payment_mode      | char(255)   | YES  |     | NULL    |                |
| recharge_duration | char(255)   | YES  |     | NULL    |                |
| invoice_number    | char(255)   | YES  |     | NULL    |                |
| cheque_no         | char(255)   | YES  |     | NULL    |                |
| bank_name         | char(255)   | YES  |     | NULL    |                |
| verify_by_ac      | int(11)     | YES  |     | 0       |                |
| adjusted_days     | int(11)     | YES  |     | NULL    |                |
| adjustment_note   | text        | YES  |     | NULL    |                |
+-------------------+-------------+------+-----+---------+----------------+
20 rows in set
在解释问题时

+----+-------------+--------------------------+------+-----------------------------+--------------+---------+-------+------+-------------+
| id | select_type | table                    | type | possible_keys               | key          | key_len | ref   | rows | Extra       |
+----+-------------+--------------------------+------+-----------------------------+--------------+---------+-------+------+-------------+
|  1 | SIMPLE      | logs                     | ref  | branch_index,added_on_index | branch_index | 5       | const |   37 | Using where |
+----+-------------+--------------------------+------+-----------------------------+--------------+---------+-------+------+-------------+
1 row in set
更新::解释添加复合索引后的查询Branch\u added\u索引

+----+-------------+--------------------------+------+------------------------------------------------+--------------+---------+-------+------+-------------+
| id | select_type | table                    | type | possible_keys                                  | key          | key_len | ref   | rows | Extra       |
+----+-------------+--------------------------+------+------------------------------------------------+--------------+---------+-------+------+-------------+
|  1 | SIMPLE      | logs                     | ref  | branch_index,added_on_index,branch_added_index | branch_index | 5       | const |   37 | Using where |
+----+-------------+--------------------------+------+------------------------------------------------+--------------+---------+-------+------+-------------+
1 row in set
在分支上添加一个复合键,在分支上添加_,以便覆盖自使用和以来的所有WHERE条件

ALTER TABLE logs ADD KEYbranch,已添加

这应该快得多,而且您可以删除branch_索引键,因为上面的索引可以替换它。您只返回54000中的37行,所以基数是确定的

ALTER TABLE logs DROP INDEX `branch_index`;
也可以使用索引提示

SELECT username FROM `logs` USE INDEX (branch_added_index)  WHERE 
logs.branch=1 
and
logs.added_on > '2016-11-27 00:00:00'

在2个字段分支上创建一个复合索引,添加如下内容:

ALTER TABLE `logs` ADD KEY idx_branch_added (branch, added_on);

如果表的现有索引已用于其他查询,请尝试添加新的复合索引,如下所示
在logsbranch上创建索引,在

上添加索引这将更快,因为它涵盖:

INDEX(branch, added_on, username) -- in exactly that order.
并删除任何作为此项前缀的索引

基数很少重要。并且解释经常得到错误的值

解释显示分支大小为5-它真的需要为空吗?你们会有20亿分支机构吗?考虑使用更小的东西,例如1字节TyyIn无符号非空值0…255。< /P> 此外,将255缩小到合理的范围


描述表格时,请使用“显示创建表格”;它更具描述性。这可能有助于了解引擎Charset,等等。

我已经按照您的建议创建了复合索引,但查询执行时间仍然不确定improved@kamalrumba添加新的解释并删除旧的解释index@kamalrumba从新的解释中,我看到查询仍然使用旧的索引。只需删除itI我已经按照您的建议删除了索引,并且查询执行时间大大提高。您能解释一下为什么在同一列上单独创建的索引比合成索引慢。@简言之,新索引具有更好的基数,当旧索引选择所有日志时,它可以同时考虑这两种情况。branch=1,然后它扫描另一列。我想我们收到了消息