如何使用 MyISAM table 加速使用相同 table 与 MySQL 两次的查询?
How can I speed up a query that use twice the same table against a MySQL using MyISAM table?
我使用如下查询,使用两次相同的 table utdat 来恢复数据。
link加2个table的关键是tableA.utprog = tableB.utprog.
SELECT tableA.upd, tableB.utdata FROM utdat as tableA, utdat AS tableB
WHERE tableA.uttdat = 'I' AND tableA.utctip = '01' AND
substring(tableA.utreco, 1, 1) = '3'
AND tableB.uttdat = 'I' AND tableB.utctip = '01' AND
substring(tableB.utreco, 1, 1) = '1'
AND tableA.utprog = tableB.utprog AND TRIM(substr(tableB.utreco, 65,
12)) = '20000190';
有一种方法可以加快对 MyISAM 数据库的查询速度吗?
在 WHERE
子句中使用的 3 列上创建多列索引:
ALTER TABLE utdat ADD INDEX (uttdat, utctip, itreco);
并将 SUBSTRING(tableA.utreco, 1, 1) = 3
更改为 tableA.utreco LIKE '3%', as MySQL knows how to optimize prefix matching in a
LIKEexpression, but it may not realize that
SUBSTR` 正在提取前缀。
它不会影响性能,但你也应该学习 ANSI JOIN 语法。
SELECT tableA.upd, tableB.utdata
FROM utdat as tableA
JOIN utdat AS tableB ON tableA.utprog = tableB.utprog
WHERE tableA.uttdat = 'I' AND tableA.utctip = '01' AND tableA.utreco LIKE '3%'
AND tableB.uttdat = 'I' AND tableB.utctip = '01' AND tableB.utreco LIKE '1%'
AND TRIM(substr(tableB.utreco, 65, 12)) = '20000190';
我使用如下查询,使用两次相同的 table utdat 来恢复数据。
link加2个table的关键是tableA.utprog = tableB.utprog.
SELECT tableA.upd, tableB.utdata FROM utdat as tableA, utdat AS tableB
WHERE tableA.uttdat = 'I' AND tableA.utctip = '01' AND
substring(tableA.utreco, 1, 1) = '3'
AND tableB.uttdat = 'I' AND tableB.utctip = '01' AND
substring(tableB.utreco, 1, 1) = '1'
AND tableA.utprog = tableB.utprog AND TRIM(substr(tableB.utreco, 65,
12)) = '20000190';
有一种方法可以加快对 MyISAM 数据库的查询速度吗?
在 WHERE
子句中使用的 3 列上创建多列索引:
ALTER TABLE utdat ADD INDEX (uttdat, utctip, itreco);
并将 SUBSTRING(tableA.utreco, 1, 1) = 3
更改为 tableA.utreco LIKE '3%', as MySQL knows how to optimize prefix matching in a
LIKEexpression, but it may not realize that
SUBSTR` 正在提取前缀。
它不会影响性能,但你也应该学习 ANSI JOIN 语法。
SELECT tableA.upd, tableB.utdata
FROM utdat as tableA
JOIN utdat AS tableB ON tableA.utprog = tableB.utprog
WHERE tableA.uttdat = 'I' AND tableA.utctip = '01' AND tableA.utreco LIKE '3%'
AND tableB.uttdat = 'I' AND tableB.utctip = '01' AND tableB.utreco LIKE '1%'
AND TRIM(substr(tableB.utreco, 65, 12)) = '20000190';