【问题标题】:How to optimize a MySQL table? [duplicate]如何优化 MySQL 表? [复制]
【发布时间】:2014-06-27 05:18:34
【问题描述】:

我正在寻找一种方法来提高表的性能。下面是 MySQL 表。

+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| receiver | varchar(15) | NO   |     | NULL    |                |
| depCode  | varchar(12) | NO   |     | NULL    |                |
| sms      | text        | YES  |     | NULL    |                |
| billable | varchar(5)  | YES  |     | NULL    |                |
| smsc     | varchar(10) | YES  |     | NULL    |                |
| sendDate | date        | YES  |     | NULL    |                |
| sendTime | time        | YES  |     | NULL    |                |
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
+----------+-------------+------+-----+---------+----------------+

它有超过 10,000,000 条记录。

下面是我用来获取记录的 SQL 查询。 ${variable} 是变量的语法。

SELECT count(*) as totalCount FROM `tbl_incoming` 
WHERE `depCode`=${depCode} AND `smsc`=${smsc_value} AND receivedDate BETWEEN  ${fromDate} AND ${toDate} 
ORDER BY receivedDate, receivedTime;

请参阅下面的说明。

EXPLAIN SELECT * FROM `tbl_incoming`  
WHERE `depCode`="Slrd" AND `smsc`="dgsm" AND receivedDate  BETWEEN  "2009-11-26" AND "2014-11-26"  
ORDER BY receivedDate, receivedTime;

+----+-------------+--------------+------+---------------+------+---------+------+--------+-----------------------------+
| id | select_type | table        | type | possible_keys | key  | key_len | ref  | rows   | Extra                       |
+----+-------------+--------------+------+---------------+------+---------+------+--------+-----------------------------+
|  1 | SIMPLE      | tbl_incoming | ALL  | NULL          | NULL | NULL    | NULL | 542527 | Using where; Using filesort |
+----+-------------+--------------+------+---------------+------+---------+------+--------+-----------------------------+

据我所知,索引可以帮助提高表的性能。

PS:除了索引之外,我也在寻找其他选项。

如何提高表的性能?

【问题讨论】:

  • 你尝试过索引吗?
  • @Sathya 我也在寻找其他选择。不仅仅是索引。这就是为什么这不是重复的。我认为您不必将其标记为“已关闭”。

标签: mysql sql database performance indexing


【解决方案1】:

索引应该可以帮助您。

在您的查询中,您在列 depCode、smsc 和 receivedDate 上有一个 where 条件。您必须对数据有更多的了解。 首先确定上述 3 列中具有最多不同值的列。选择它作为索引列,并将其他 2 列添加到包含中。

Eg:
Create Index IX_Custome On tbl_incoming (depCode) Include (smsc,receivedDate)

这只是一种方法,如果没有用,请忽略。

【讨论】:

    猜你喜欢
    • 2011-02-28
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 2011-05-18
    • 2014-03-29
    • 1970-01-01
    相关资源
    最近更新 更多