1.1開發正規化1:不要輕易把字段嵌入到表示式
sql> create index emp4_hiredate_ind onemp4(hiredate);
sql> select * from emp4 wherehiredate-7execution plan
plan hash value: 498553951
| id | operation | name |rows | bytes | cost (%cpu)| time |
| 0| select statement | | 514| 44718 | 3 (0)| 00:00:01 |
|* 1| table access full| emp4 | 514 | 44718 | 3 (0)| 00:00:01 |
sql> select * from emp4 where hiredateexecution plan
plan hash value: 3424984182
| id | operation | name | rows | bytes | cost (%cpu)| time |
| 0| select statement | | 14 | 1218 | 3 (0)| 00:00:01 |
| 1| table access by index rowid |emp4 | 14 | 1218 | 3 (0)| 00:00:01 |
|* 2| index range scan | emp4_hiredate_ind | 14 | | 2 (0)| 00:00:01 |
總結:字段嵌入到表示式後造成走全表掃瞄而不是索引,降低效率
1.2開發正規化2:減少欄位的轉換
sql> select * from emp4where to_char(hiredate,'yyyy-mm-dd')<'1981-05-01';
execution plan
plan hash value: 498553951
| id | operation | name | rows | bytes | cost (%cpu)| time |
| 0 | select statement | | 4| 348 | 3 (0)| 00:00:01 |
|* 1 | table access full| emp4 | 4| 348 | 3 (0)| 00:00:01 |
sql> select * from emp4where hiredateexecution plan
plan hash value: 3424984182
| id | operation | name | rows | bytes | cost (%cpu)| time |
| 0 | select statement | | 4 | 348 | 3 (0)| 00:00:01 |
| 1| table access by index rowid| emp4 | 4 | 348 | 3 (0)| 00:00:01 |
|* 2 | index range scan |emp4_hiredate_ind | 4 | | 2 (0)| 00:00:01 |
總結:語句中大量使用轉換函式可能抑制索引使用,從而走全表掃瞄
1.3 開發正規化3:復合索引建在比較固定查詢的某些列
sql>create index emp4_e_j_s on emp4(ename,job,sal);
sql>select ename,job,sal from emp4 where ename='cuug';
500rows selected.
executionplan
planhash value: 1619719520
|id | operation | name | rows | bytes | cost (%cpu)| time |
| 0 | select statement | | 500 | 13000 | 3 (0)| 00:00:01 |
|* 1 | index fast full scan| emp4_e_j_s | 500 | 13000 | 3 (0)| 00:00:01 |
sql>select * from emp4 where ename='cuug';
executionplan
planhash value: 498553951
|id | operation | name | rows | bytes | cost (%cpu)| time |
| 0 | select statement | | 500 | 43500 | 3 (0)| 00:00:01 |
|* 1 | table access full| emp4 | 500 |43500 | 3 (0)| 00:00:01 |
避免索引失效
1.全值匹配,對索引中所有列都指定具體值。2.最左字首法則,如果索引有多列,要遵循最左字首法則。指的是查詢從索引的最左前列開始,並且不跳過索引中的列。否者不走索引。3.範圍查詢右邊的列,不走索引,應為mysql底層範圍查詢之後結構就斷了,就無法使用後面得索引了。4.不要在索引列上進行運算操作,索引將...
怎麼避免索引失效
首先在接著 之前,我們先說一下,如何判斷資料庫的索引是否生效!相信大家應該猜到了,就是explain!explain顯示了mysql如何使用索引來處理select語句以及連線表。他可以幫助選擇更好的索引和寫出更優化的查詢語句。例如我們有一張表user,為name列建立索引name index,如下所...
如何避免索引失效
全值匹配 最佳左字首法則 如果索引了多列,要遵守最左字首法則。指得時查詢從索引的最左前列開始並且不跳過索引中的列 不在索引列上左任何操作 計算 函式 自動or手動 型別轉換 因為在索引列上做操作會導致索引失效而轉向全表掃瞄 儲存引擎不能使用索引中範圍條件右邊的列 盡量使用覆蓋索引 只訪問索引的查詢 ...