mysql 建立索引的例子_mysql建立合适的索引的例子
在mysql數(shù)據(jù)庫(kù)中,其實(shí)建索引也是一門學(xué)問,一個(gè)表中,索引并不是越多越好,而是適合你的業(yè)務(wù)才最重要。那么建立索引的時(shí)候,我們應(yīng)該從以下幾點(diǎn)去考量。
1. 索引字段越小越好,像varchar(10)肯定比text類型的效果要好。
2. 經(jīng)常需要作為where、group by、order by等條件的時(shí)候,要為該字段建立索引。
3. 當(dāng)要建立聯(lián)合索引的時(shí)候,離散度較大的列放到前面。打個(gè)比方,如果要建立一個(gè)姓名(name)和年齡(age)的聯(lián)合索引,肯定要把name放到前面(index(name,age)),因?yàn)閍ge的范圍最多不會(huì)超過0-120(全世界沒幾個(gè)人能活到120歲以上吧),而name的情況就有成千上萬(wàn)種了。放到前面的好處就是第一次就能篩掉一大批數(shù)據(jù),這樣更有利查詢的效率。
4. 只給經(jīng)常作為查詢條件的字段建立索引,因?yàn)樗饕⒉皇窃蕉嘣胶?#xff0c;多了首先會(huì)增加磁盤開銷,然后查詢的時(shí)候,mysql引擎也要去判斷該使用那個(gè)索引,再就是索引多了,對(duì)update、insert、delete的效率也會(huì)造成影響。
總之,建立索引的時(shí)候也要認(rèn)真思考,才能讓表結(jié)構(gòu)更加完美
MySQL何時(shí)使用索引
對(duì)一個(gè)鍵碼使用>, >=, =,
SELECT * FROM table_name WHERE key_part1=1 and key_part2 > 5;
SELECT * FROM table_name WHERE key_part1 IS NULL;
當(dāng)使用不以通配符開始的LIKE
SELECT * FROM table_name WHERE key_part1 LIKE 'jani%'
在進(jìn)行聯(lián)結(jié)時(shí)從另一個(gè)表中提取行時(shí)
SELECT * from t1,t2 where t1.col=t2.key_part
找出指定索引的MAX()或MIN()值
SELECT MIN(key_part2),MAX(key_part2) FROM table_name where key_part1=10
一個(gè)鍵碼的前綴使用ORDER BY或GROUP BY
SELECT * FROM foo ORDER BY key_part1,key_part2,key_part3
在所有用在查詢中的列是鍵碼的一部分時(shí)間
SELECT key_part3 FROM table_name WHERE key_part1=1
------------------------------------------------------------------------------------------------------------------------------------
MySQL何時(shí)不使用索引
如果MySQL能估計(jì)出它將可能比掃描整張表還要快時(shí),則不使用索引。例如如果key_part1均勻分布在1和100之間,下列查詢中使用索引就不是很好:
SELECT * FROM table_name where key_part1 > 1 and key_part1 < 90
如果使用HEAP表且不用=搜索所有鍵碼部分。
在HEAP表上使用ORDER BY。
如果不是用鍵碼第一部分
SELECT * FROM table_name WHERE key_part2=1
如果使用以一個(gè)通配符開始的LIKE
SELECT * FROM table_name WHERE key_part1 LIKE '%jani%'
搜索一個(gè)索引而在另一個(gè)索引上做ORDER BY
SELECT * from table_name WHERE key_part1 = # ORDER BY key2
總結(jié)
以上是生活随笔為你收集整理的mysql 建立索引的例子_mysql建立合适的索引的例子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eos和以太坊有什么关系_【EOS价格分
- 下一篇: mysql 索引 内存_mysql索引【