- 为查询缓存优化你的查询
// 查询缓存不开启
$r = mysql_query(“SELECT username FROM user WHERE signup_date >= CURDATE()”);
// 开启查询缓存
$today = date(“Y-m-d”);
r
=
m
y
s
q
l
q
u
e
r
y
(
"
S
E
L
E
C
T
u
s
e
r
n
a
m
e
F
R
O
M
u
s
e
r
W
H
E
R
E
s
i
g
n
u
p
d
a
t
e
>
=
′
r = mysql_query("SELECT username FROM user WHERE signup_date >= '
r=mysqlquery("SELECTusernameFROMuserWHEREsignupdate>=′today’");
- 当只要一行数据时使用 LIMIT 1
// 没有效率的:
r = m y s q l q u e r y ( " S E L E C T ∗ F R O M u s e r W H E R E c o u n t r y = ′ C h i n a ′ " ) ; i f ( m y s q l n u m r o w s ( r = mysql_query("SELECT * FROM user WHERE country = 'China'"); if (mysql_num_rows( r=mysqlquery("SELECT∗FROMuserWHEREcountry=′China′");if(mysqlnumrows(r) > 0) {
// …
}
// 有效率的:
r
=
m
y
s
q
l
q
u
e
r
y
(
"
S
E
L
E
C
T
1
F
R
O
M
u
s
e
r
W
H
E
R
E
c
o
u
n
t
r
y
=
′
C
h
i
n
a
′
L
I
M
I
T
1
"
)
;
i
f
(
m
y
s
q
l
n
u
m
r
o
w
s
(
r = mysql_query("SELECT 1 FROM user WHERE country = 'China' LIMIT 1"); if (mysql_num_rows(
r=mysqlquery("SELECT1FROMuserWHEREcountry=′China′LIMIT1");if(mysqlnumrows(r) > 0) {
// …
}
- 为搜索字段建索引
索引并不一定就是给主键或是唯一的字段。如果在你的表中,有某个字段你总要会经常用来做搜索,那么,请为其建立索引吧
4.在Join表的时候使用相当类型的例,并将其索引
如果你的应用程序有很多 JOIN 查询,你应该确认两个表中Join的字段是被建过索引的。这样,MySQL内部会启动为你优化Join的SQL语句的机制。
// 在state中查找company
$r = mysql_query(“SELECT company_name FROM users
LEFT JOIN companies ON (users.state = companies.state)
WHERE users.id = $user_id”);
// 两个 state 字段应该是被建过索引的,而且应该是相当的类型,相同的字符集。
5.避免 SELECT *
6.使用 ENUM 而不是 VARCHAR
7.固定长度的表会更快
8.like查询
select name from t_table t where t.name like ‘%何远君%’,这个查询即使name建立了索引也不起作用
select name from t_table t where t.name like '何远君%,这种查询使用到了索引,但是并非要想查询的关键词都在开头
可以使用LOCATE(‘xbar’,foobar
),该方法返回xbar在字符串foobar中的索引
如果foobar不包含xbar则返回0,因为sql可以这样写:
select name from t_table t where loacate(‘何远君’,t.name)>0
也可以
使用POSITION(‘substr’ IN field
)方法
select *from t_table t where POSITION(‘何远君’ IN t.name)方法
INSTR(‘str’,‘sustr’) 方法
SELECT column
FROM table
WHERE INSTR(field
, ‘keyword’ )>0
各种IT书籍书目及下载链接
https://blog.csdn.net/dh1027/article/details/89327978