优化SQL的执行速度
时间:2022-03-13 22:36
/* 1.index的col_1列有运算 */ SELECT * FROM SomeTable WHERE col_1 * 1.1 > 100;
这种情况改为 WHERE col_1 > 100/1.1即可。
WHERE col_1 IS NULL;
使用了is null的时候也是使用不了index的。这个时候可以做个函数index来解决。
WHERE SUBSTR(col_1, 1, 1) = ‘a‘;
index的列使用了函数。这个时候可以做个函数index来解决。
WHERE col_1 <> 100;
使用了否定形式。 (<>, !=,NOT EQUAL, NOT IN)也是一样的。
WHERE col_1 > 100 OR col_2 = ‘abc‘;
OR的时候最好改为in。 如果非要使用OR的话,追加bitmap index。
× SELECT * FROM SomeTable WHERE col_1 LIKE ‘%a‘; × SELECT * FROM SomeTable WHERE col_1 LIKE ‘%a%‘; ○ SELECT * FROM SomeTable WHERE col_1 LIKE ‘a%‘;
○ SELECT * FROM SomeTable WHERE col_1 = 10 AND col_2 = 100 AND col_3 = 500; ○ SELECT * FROM SomeTable WHERE col_1 = 10 AND col_2 = 100 ; × SELECT * FROM SomeTable WHERE col_1 = 10 AND col_3 = 500 ; × SELECT * FROM SomeTable WHERE col_2 = 100 AND col_3 = 500 ; × SELECT * FROM SomeTable WHERE col_2 = 100 AND col_1 = 10 ;
假设col_1, col_2, col_3 列上有index,如果顺序不对的话不能使用index。
rowid(Oracle)、oid(PostgreSQL)如果知道行号的话,行号访问最快。
× SELECT * FROM SomeTable; ○ SELECT col_1, col_2, col_3 FROM SomeTable;
最好只取需要的数据。这样可以减少零时表的大小,也能减少网络的通信量。
优化SQL的执行速度,布布扣,bubuko.com