mysql 查詢重復的數據的SQL優化方案_MySQL教程
教程Tag:暫無Tag,歡迎添加,賺取U幣!
推薦:mysql的左右內連接用法實例本文實例講述了mysql的左右內連接用法。分享給大家供大家參考。具體如下: 用個例子來解析下mysql的左連接, 右連接和內連接 代碼如下:create table user_id ( id decimal(18) ); create table user_profile ( id decimal(18) , name varchar(255) ) ; insert into use
在mysql中查詢不區分大小寫重復的數據,往往會用到子查詢,并在子查詢中使用upper函數來將條件轉化為大寫。如:
代碼如下:
select * from staticcatalogue WHERE UPPER(Source) IN (SELECT UPPER(Source) FROM staticcatalogue GROUP BY UPPER(Source) having count(UPPER(Source))>1) ORDER BY upper(Source) DESC;
這條語句的執行效率是非常低的,特別是Source字段沒有加索引。尤其是最忌諱的在查詢條件中使用了函數,這將極大的降低查詢速度,如果查詢十萬條數據以內的10分鐘內還能獲取到數據,如果是查詢幾十萬條的話,會直接把服務器跑死的,此時可以通過一個臨時表,并且加索引,再查詢。這樣可以提高很多的速度
代碼如下:
CREATE TABLE staticcatalogue_tmp SELECT UPPER(Source) AS Source FROM staticcatalogue GROUP BY UPPER(Source) having count(UPPER(Source))>1;
ALTER TABLE staticcatalogue_tmp add INDEX TX_1 (Source);
select s.* from staticcatalogue s WHERE UPPER(s.Source) IN (SELECT st.Source FROM staticcatalogue_tmp st) ORDER BY UPPER(s.Source) DESC ;
以上就是本文sql優化方案的全部內容了,希望大家能夠喜歡。
分享:mysql中You can’t specify target table for update in FROM claumysql中You can't specify target table for update in FROM clause錯誤的意思是說,不能先select出同一表中的某些值,再update這個表(在同一語句中)。 例如下面這個sql: 代碼如下: delete from tbl where id in ( select max(id) from tbl a where EXISTS ( select 1
相關MySQL教程:
- mysql的左右內連接用法實例
- mysql中You can’t specify target table for update in FROM clau
- MySQL查詢和修改auto_increment的方法
- MySQL中的if和case語句使用總結
- Centos5.5中安裝Mysql5.5過程分享
- /var/log/pacct文件導致MySQL啟動失敗的案例分享
- MySQL中在查詢結果集中得到記錄行號的方法
- CentOS下php使用127.0.0.1不能連接mysql的解決方法
- 如何配置MySQL主從復制
- MySQL 備份和恢復策略詳細教程
- Apache服務器下使用 ab 命令進行壓力測試
- MySQL下的NoSQL解決方案HandlerSocket
- 相關鏈接:
- 教程說明:
MySQL教程-mysql 查詢重復的數據的SQL優化方案
。